为了账号安全,请及时绑定邮箱和手机立即绑定

PHP过滤查询字符

PHP过滤查询字符

PHP
王亚松 2016-12-12 12:56:40
ThinkPHP中有一段源代码:这个函数是对$_POST中的数据进行过滤。array_walk_recursive($_POST,'think_filter') ; //对数组成员递归应用think_filter函数。请问:在下面这个函数中,怎么体现过滤了?value匹配条件后,value后面连接一个空格就是过滤了?我觉得,应该是$value="";才对啊,ThinkPHP源码中是.=,请大神说一下,这是什么意思?function think_filter(&$value){    // TODO 其他安全过滤    // 过滤查询特殊字符     if(preg_match('/^(EXP|NEQ|GT|EGT|LT|ELT|OR|XOR|LIKE|NOTLIKE)$/i',$value)){         $value .= ' ';     } }
查看完整描述

3 回答

?
一瞬儿光

TA贡献178条经验 获得超70个赞

$arr = array(
    'a' => 1,
    'b' => 'LIKE'
)
$arr2 = array(
    'a' => 1,
    'b' => 'LIKE '
)
//这两个数组一样吗?
sql  = select field from table where field_id like '%LIKE%';
sql2 = select field from table where field_id like '%LIKE %';
//这两个sql一样吗?
function : function think_filter($value){}
function2: function think_filter(&$value){}
//这两个function的参数一样吗?
//弄明白这三个的不同你就明白了。


查看完整回答
反对 回复 2016-12-12
  • 王亚松
    王亚松
    非常感谢。 数组:空格 sql : 匹配 LIKE,前后可加任意字符。 匹配 LIKE空格,前后可加任意字符。 function:索引,&$value 函数外部对应$value的变量,也会随$value的变化而变化。 可我还是不明白:think_filter函数作用。 我觉得他应该是防止sql注入, 例如: 后台PHP:$sql="select *from tb_user where username= '".$_POST['username']."'"; 如果获取的$_POST['username']值为:"' or username LIKE '%s%"; $sql最终:"select *from tb_user where username='' or username LIKE '%s%'" 就会选出所有匹配%s%的用户了。 我觉得think_filter这个函数,应该防止上面这种情况发生。显然,$_POST['username']的值中的OR,LIKE等 是没有被过滤掉的。例如上例中,就不匹配 think_filter()方法中的preg_match中的内容。 请大神说具体一点
  • 王亚松
    王亚松
    这个回复居然没有格式,请大神帮忙看一下,我在自己的留言区写了,看起来方便点
  • 3 回答
  • 0 关注
  • 1447 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信