记录一次SQL注入练习
SQL 注入(SQL Injection)是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事先定义好的 SQL 语句中添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步获取到数据信息。
我们知道,SQL 语句可以查询、插入、更新和删除数据,且使用分号来分隔不同的命令。例如:
SELECT * FROM users WHERE user_id = $user_id
其中,user_id 是传入的参数,如果传入的参数值为“1234; DELETE FROM users”,那么最终的查询语句会变为:
SELECT * FROM users WHERE user_id = 1234; DELETE FROM users
如果以上语句执行,则会删除 users 表中的所有数据。
当然,上述“删表”例子只是一个攻击样例,实际上黑客能做的事远比这多。
下面我会使用一个简单的例子演示黑客 SQL 注入的全过程。
靶 ...
SQL注入攻击防御之预编译的探究
前言注入攻击作为OWASP top10绝对的No.1被广为人知,其中SQL注入首当其冲,除了转义过滤拦截敏感字符之外,安全从业者较为推荐的防止SQL注入的方法是使用预编译。那么预编译能够防止SQL注入的根本原因是什么?它真的能够完全防止SQL注入吗?本文从PHP的PDO和MySQL入手,对以上两个问题进行探究。
预编译防止注入的原因关于预编译能够防止注入的原因,还要从预编译的运行机制说起。通常来说,在MySQL中,一条SQL语句从传入到执行经历了以下过程:检查缓存、规则验证、解析器解析为语法树、预处理器进一步验证语法树、优化SQL、生成执行计划、执行。
其中对语法的解析和优化的过程其实是与传入的字段值无关的,但却比真正执行的过程更为耗费时间,因此在处理某些语句时,很容易造成时间的浪费,效率的下降,如:
12SELECT * FROM user WHERE id=1;SELECT * FROM user WHERE id=2;
这两个语句由于id后的值不同,因此在检查缓存阶段不会匹配,不能得到重用,后面的所有阶段都要再依次进行,但它们的语法树却是相似的,只是id字段的值不同。
预编译使 ...
SpringBoot 构造器注入、Setter方法注入和Field注入对比
0. 引入今天在看项目代码的时候发现在依赖注入的时候使用了构造器注入,之前使用过 Field 注入和 Setter 方法注入,对构造器注入不是很了解。经过查阅资料看到,Spring 推荐使用构造器注入的方式,下面介绍构造器注入到底有什么玄机。
1. 常见的三种注解注入方式对比Field 注入1234567@Controllerpublic class HelloController { @Autowired private AlphaService alphaService; @Autowired private BetaService betaService;}
field 注入方式是使用最多的,原因是这种方式使用起来非常简单,代码更加简洁。
Setter 方法注入1234567891011121314@Controllerpublic class HelloController { private AlphaService alphaService; private BetaService betaService; ...
Linux快速安装Clash
前言:在 Linux 安装软件时,通常会发现连接超时的情况,如果如果你的网络没有出现故障,那大概率就是 GFW 搞的鬼。
最常见的绕开方式就是换源,比如我们经常使用的 pip 换源、docker 换源,使用国内的源站可以大大减少我们访问外网的次数。
但是,这只能解决常见的问题。
如果你需要执行一个 shell 脚本下载 go 语言模块,但是这个脚本强制你使用 proxy.golang.org 国外代理该怎么办?
在本地环境,也许你自己对其进行修改。
但是如果你要执行的shell在云端,shell 又要请求其他的 shell。。。
这时候就无可避免地要访问外部网络。
在下文,我会介绍两种方法使我们的 Linux 也能访问外网。不过开始之前,我希望你已经有了自己的梯子,并且已经成功在 Windows 安装成功了。如果你不了解梯子或想向我询问相关资源,可以将你的问题发我邮箱。
Windows 代理此方法仅适用于虚拟机,云服务器移步下方。
首先在 win 主机上安装 Clash for Windows,点击配置,导入梯子的配置文件。
然后在常规选项中,打开允许当前局域网连接
首先确认 Wi ...
fabric学习系列(〇):fabric-基础架构原理
Fabric 项目的目标是实现一个通用的权限区块链(Permissioned Chain)的底层基础框架,为了适用于不同的场合,采用模块化架构提供可切换和可扩展的组件,包括共识算法、加密安全、数字资产、智能合约和身份鉴权等服务。
主要组件Fabric 的组件包括客户端(Client),网络节点(Peer),CA(Certificate Authority)节点和排序节点(Orderer)。各个组件的相互关系如图所示。
Fabric组件关系
客户端的主要作用是和 Fabric 系统交互,实现对区块链系统的操作。这些操作分为管理类和链码类的两种。管理类包括启停节点和配置网络等;链码类操作主要是链码的生命周期管理,如安装、实例化以及调用链码。最常用的客户端是命令行客户端(CLI),此外是用 Fabric SDK 开发的应用客户端。用户通过不同的客户端使用 Fabric 系统的功能。
网络节点(Peer)是区块链去中心化网络中的对等节点,按照功能主要分为背书节点(Endorser)和确认节点(Committer)。背书节点主要对交易预案进行校验、模拟执行和背书。确认节点主要负责检验交易的合法 ...
fabric学习系列(二):java合约部署
java 合约部署在阅读本篇教程之前,先确保你的基本 fabric 测试环境已经安装完毕
安装参考教程
话不多说,我们现在开始
前期工作首先确保位于 fabric-samples/test-network 目录
123./network.sh down./network.sh up./network.sh createChannel
然后运行以上命令部署一个基本环境
新建终端,然后切换到 fabric-samples/chaincode 目录下
git clone git@github.com:kuanyuh/fabric-chaincode-java.git
或手动下载智能合约代码到目标目录
然后我们回到 fabric-samples/test-network 目录下
运行以下 shell
12345678#将 bin 目录中二进制文件添加到 CLI 路径export PATH=${PWD}/../bin:$PATH#设置 FABRIC_CFG_PATH 设置为指向其中的 core.yaml 文件export FABRIC_CFG_PATH=$PWD/../c ...
fabric学习系列(一):fabric安装
fabric安装一、环境配置
建议使用 Linux 操作系统(虚拟机或服务器)不建议使用 Windows docker。
为虚拟机配置国内源,以配置清华源为例(方便后面安装软件)
进入清华大学源 (https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/)
选择 Ubuntu 对应版本,复制以下镜像源代码
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份源
vim /etc/apt/sources.list #在打开的文件里用新复制的源替换原有的(把原有的删掉,粘贴新复制的)
sudo apt upgrade && sudo apt update #更新源
二、基础环境搭建1. 安装git1sudo apt install git
2. 安装cURL1sudo apt install curl
3. 安装Docker1sudo apt install docker.io
查看Docker版本信息
1docker --versio ...
LeetCode HOT (java算法) 实时更新
2. 两数相加
3. 无重复字符的最长子串
2. 两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例1:
123输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.
示例 2:
12输入:l1 = [0], l2 = [0]输出:[0]
示例 3:
12输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输出:[8,9,9,9,0,0,0,1]
提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零
思路由于输入的两个链表都是逆序存储数字的位数的,因此两个链表中同一位置的数字可以直接相加。
我们同时遍历两个链表,逐位计算它们的和,并与当前位置的进位值相加。具体而言,如果当前两个链表处相应位置的数字为 ...
https协议详解
一、HTTPS 是什么HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer):
HTTPS协议 = HTTP协议 + SSL/TLS协议,使用 SSL/TLS 来加密数据包
HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
二、HTTPS 的工作过程既然要保证数据安全,就需要进行“加密”,即网络传输中不再直接传输明文,而是加密之后的“密文”。加密的方式有很多,但是整体可以分为两大类:对称加密和非对称加密。
1.加密方式对称加密
其实就是只通过一个密钥,把明文加密成密文后,可以使用相同的密钥把密文解密成明文
非对称加密
非对称加密需要两个密钥,叫做“公钥”和”私钥“。公钥和私钥是配对的,使用公钥加密的数据只能用私钥解密,同样的使用私钥加密的数据只能用公钥解密。
缺点:
运算速度非常慢,比对称加密慢很多
引入非对称加密后,为什么还要使用对称加密?
由于对称加密的成本(对机器资源的消耗)远远低于非对称加密,而实际上客户端和服务器之间传输的数据量会很大,如果都使用非对称加密,整体的传输速度就会 ...
ThreadLocal原理及内存泄露问题
ThreadLocal 叫做本地线程变量,意思是说,ThreadLocal 中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,ThreadLocal 为变量在每个线程中创建了一个副本,这样每个线程都可以访问自己内部的副本变量。
一、ThreadLocal初探12345678910111213141516171819202122232425262728293031323334353637383940public class ThreadLocalTest { static ThreadLocal<String> localVar = new ThreadLocal<>(); static void print(String str) { //打印当前线程中本地内存中本地变量的值 System.out.println(str + " :" + localVar.get()); //清除本地内存中的本地变量 localVar.remove(); ...



