addslashes注入漏洞与mb_addslashes

来源:互联网 发布:淘宝自然流量提升 编辑:程序博客网 时间:2024/05/21 21:46

由于addslashes无视目标字符串的编码,直接按照二进制字节对字符串添加下划线,会导致很多注入隐患。

比如说gbk环境下,有一个宽字符是"\xbf\x27"。虽然它不在gbk的编码范围内,但是会把它当成宽字符解析,攻击者可以通过构造url参数等方式传进来。传统的addslashes函数会直接无视掉"\xbf"而直接对后面的"\x27"加下划线,结果变成了"\xbf\x5c\x27"。这样前面两个字节构成宽字符,后面的"\x27"就会单独被解析。

防止注入的话,能够预编译是最好,不能的话应该按照当前的编码,用mb前缀的字符串处理函数手写一个。

比如下面这个:

function mb_addslashes($str, $enco){  $retstr = "";  $len = mb_strlen($str, $enco);  for($i = 0; $i < $len; $i++)  {    $chr = mb_substr($str, $i, 1, $enco);    if($chr == "\0")      $retstr .= "\\0";    else if($chr == "'")      $retstr .= "\\'";    else if($chr == "\"")      $retstr .= "\\\"";    else if($chr == "\\")      $retstr .= "\\\\";    else       $retstr .= $chr;  }  return $retstr;}

0 0
原创粉丝点击