Thinkphp中防止SQL注入的两个办法

admin 2021年7月29日00:33:49评论951 views字数 1522阅读5分4秒阅读模式

共有两种方法可以屏蔽掉SQL注入

一种是官方推荐的,使用where条件表达式

还有一种是刚刚想出来的,自己测试能屏蔽单引号这些(没全部测试,因为我懒)

下面就简单讲讲这两种方法:

第一种(WHERE条件表达式)

格式:$map[‘字段名’] = array(‘表达式’, ‘操作条件’);

简介: 这需要解释什么吗?字段名,表达式,操作条件,看不懂的看下面的例子

TP运算符 SQL运算符 例子 实际查询条件
eq = $map[‘id’] = array(‘eq’,100); 等效于:$map[‘id’] = 100;
neq != $map[‘id’] = array(‘neq’,100); id != 100
gt > $map[‘id’] = array(‘gt’,100); id > 100
egt >= $map[‘id’] = array(‘egt’,100); id >= 100
lt < $map[‘id’] = array(‘lt’,100); id < 100
elt <= $map[‘id’] = array(‘elt’,100); id <= 100
like like $map<‘username’> = array(‘like’,’Admin%’); username like ‘Admin%’
between between and $map[‘id’] = array(‘between’,’1,8′); id BETWEEN 1 AND 8
not between not between and $map[‘id’] = array(‘not between’,’1,8′); id NOT BETWEEN 1 AND 8
in in $map[‘id’] = array(‘in’,’1,5,8′); id in(1,5,8)
not in not in $map[‘id’] = array(‘not in’,’1,5,8′); id not in(1,5,8)
and(默认) and $map[‘id’] = array(array(‘gt’,1),array(‘lt’,10)); (id > 1) AND (id < 10)
or or $map[‘id’] = array(array(‘gt’,3),array(‘lt’,10), ‘or’); (id > 3) OR (id < 10)
xor(异或) xor 两个输入中只有一个是true时,结果为true,否则为false,例子略。 1 xor 1 = 0
exp 综合表达式 $map[‘id’] = array(‘exp’,’in(1,3,8)’); $map[‘id’] = array(‘in’,’1,3,8′);

例子:

  1. $model = M('Users');

  2. $map['uid'] = $uid;

  3. $model->where($map)->find();

 

使用where表达式后,TP会自动拼接where条件,并将条件中的恶意字符进行转义

第二种(WHERE条件中使用双引号):

举个栗子先:

  1. $model = M('Users');

  2. $where = "uid = "%{$uid}%"";

  3. $model->where($where)->find();

 

这种方式肯定是会存在注入的,但是TP中有一个方法:

  1. I('get.uid');

 

这个方法会自动将一些特殊字符转义为html实体字符.所以改造下:

  1. $uid = I('get.uid');

  2. $model = M('Users');

  3. $where = "uid = "%{$uid}%"";

  4. $model->where($where)->find();

 

我自己测试uid中加单引号时没有转义,但是SQL语句并没有出错

uid中加入双引号时,I方法将双引号转换为了实体字符,所以SQL语句也没有出错

但是我没有测试其他的什么编码能不能绕过,因为我懒

 


本文始发于微信公众号(飓风网络安全):Thinkphp中防止SQL注入的两个办法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年7月29日00:33:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Thinkphp中防止SQL注入的两个办法https://cn-sec.com/archives/359703.html

发表评论

匿名网友 填写信息