由于addslashes无视目标字符串的编码,直接按照二进制字节对字符串添加下划线,会导致很多注入隐患。 比如说gbk环境下,有一个宽字符是"\xbf\x27"。...传统的addslashes函数会直接无视掉"\xbf"而直接对后面的"\x27"加下划线,结果变成了"\xbf\x5c\x27"。这样前面两个字节构成宽字符,后面的"\x27"就会单独被解析。...比如下面这个: function mb_addslashes($str, $enco) { $retstr = ""; $len = mb_strlen($str, $enco); for(
可以发现,这里对用户输入的id参数进行了过滤,主要方法是使用了mysql_real_escape_string()函数,这个函数可以将$id变量中的单引号’、双引号”、斜杠\等字符进行转义,因而我们再输入之前的...需要说明的是,在PHP中还有一个与mysql_real_escape_string()功能类似的函数:addslashes(),这两个函数的功能都是对特殊字符进行转义,那么到底用哪个函数更好一些呢?...有人说mysql_real_escape_string()函数需要事先连接数据库,可能会报错,所以推荐使用addslashes();也有的人说addslashes()过滤不够严格,推荐使用mysql_real_escape_string...在DVWA中很明显是推荐使用mysql_real_escape_string(),那么我们就相信DVWA好了。 下面我们分析一下这里该如何绕过过滤,继续进行注入呢?
mysql_real_escape_string 转义SQL字符串中的特殊字符 转义 /x00 /n /r 空格 / ' " /x1a,针对多字节字符处理很有效。...mysql_real_escape_string会判断字符集,mysql_escape_string则不用考虑。...kindedit编辑器: 从post来的进行addslashes后就可存入数据库了,取出后直接echo即可 普通的文本: 1.htmlspecialchars接着addslashes存入数据库...2.addslashes存入数据库,取出后htmlspecialchars输出。 说明: addslashes仅仅是为了让原来的字符正确地进入数据库。...这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。
php $str = addslashes('ggg is the "dada" city in China.'); echo($str); ?...> addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。...单引号(’) 双引号(") 反斜杠(\) NULL 可用于为存储在数据库中的字符串以及数据库查询语句准备字符串 GET、POST 和 COOKIE 数据自动运行 addslashes() 可以使用函数...get_magic_quotes_gpc() 进行检测 addslashes(string) 要转义的字符串 运行实例 "; echo addslashes($str) . " This is safe in a database query."; ?> Who's Who\'s
addslashes 与 mysql_real_escape_string 行为不一致,对部分特殊字符(如 \x00、\n、\r、\x1a)处理不当,存在边缘绕过场景。...$v : "'".addslashes($v)....$v1 : "'".addslashes($v1)....$v1 : "'".addslashes($v1)....addslashes 转义不如 mysql_real_escape_string 严谨,对部分字符处理存在差异,存在边缘绕过风险。
那么怎么逃过addslashes的限制?众所周知addslashes函数产生的效果就是,让'变成\',让引号变得不再是“单引号”,只是一撇而已。...0×03 mysql_real_escape_string解决问题? 部分cms对宽字节注入有所了解,于是寻求解决方案。...于是,有的cms就把addslashes替换成mysql_real_escape_string,来抵御宽字符注入。...这个方式是可行的,但有部分老的cms,在多处使用addslashes来过滤字符串,我们不可能去一个一个把addslashes都修改成mysql_real_escape_string。...矫正人们对于mysql_real_escape_string的误解,单独调用set names gbk和mysql_real_escape_string是无法避免宽字符注入问题的。
1. mysql_real_escape_string() 这个函数对于在PHP中防止SQL注入攻击很有帮助,它对特殊的字符,像单引号和双引号,加上了“反斜杠”,确保用户的输入在用它去查询以前已经是安全的了...但现在mysql_real_escape_string()这个函数基本不用了,所有新的应用开发都应该使用像PDO这样的库对数据库进行操作,也就是说,我们可以使用现成的语句防止SQL注入攻击。...2. addslashes() 这个函数和上面的mysql_real_escape_string()很相似。...默认情况下, magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据 自动运行 addslashes()。...不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致 双层转义。
防SQL注入仅依赖addslashes()函数(而非mysql_real_escape_string或PDO参数绑定),且拼接逻辑中存在多处在数组元素上调用addslashes后又判断is_int/is_float...$v:"'".addslashes($v)."'";//addslashes防注入$s.="`$k`=$vAND";//字段名$k未转义}elseif(isset($v[0])){$s....$v:"'".addslashes($v1)."'";$s....$v1:"'".addslashes($v1)."'";$s....风险等级与结论架构缺陷(严重)危害:addslashes在多字节字符集(如GBK)下可被绕过,MySQL真正的转义函数应为mysql_real_escape_string或PDO参数绑定字段名$k仅用反引号包裹
本文将从sql注入风险说起,并且比较addslashes、mysql_escape_string、mysql_real_escape_string、mysqli和pdo的预处理的区别。...addslashes (PHP 4, PHP 5, PHP 7) addslashes — 使用反斜线引用字符串 说明 ¶ addslashes ( string $str ) : string 返回字符串...范例 ¶ Example #1 一个 addslashes() 例子 <?...php 2. mysql_real_escape_string() (推荐指数4) 就用addslashes好了..暂时可以忘记掉mysql_real_escape_string了 (www.cnblogs.com...mysql_real_escape_string()防注入详解 此方法在php5.5后不被建议使用,在php7中废除。
0X01 addslashes() –>(PHP 4, PHP 5, PHP 7) 用法: string addslashes ( string $str ) 返回值: 返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线...echo addslashes($str); ?...本函数和 mysql_real_escape_string() 完全一样,除了 mysql_real_escape_string() 接受的是一个连接句柄并根据当前字符集转移字符串之外。...mysql_real_escape_string() 调用mysql库的函数 mysql_real_escape_string, 在以下字符前添加反斜杠: \x00 \n \r \ ' " \x1a...在运行时调用转义函数(如 addslashes())更有效率。
mysql_real_escape_string(string,connection) 函数会对字符串中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义。...$name = trim( $_POST[ 'txtName' ] ); // Sanitize message input $message = strip_tags( addslashes...( $message ) ); $message = mysql_real_escape_string( $message ); $message = htmlspecialchars...addslashes() 函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。...$name = trim( $_POST[ 'txtName' ] ); // Sanitize message input $message = strip_tags( addslashes
,转义 &转成& "转成" '转成' //发现并不转义 当htmlspecialchars($username) <转成< >转成> 注意 ‘ 不转义,此函数并不能防止SQL注入 ---- 0x03 addslashes.../不转换 ---- 0x04 mysql_real_escape_string() 转义SQL字符串中的特殊字符 转义 \x00 \n \r 空格 \ ' " \x1a,针对多字节字符处理很有效。...mysql_real_escape_string会判断字符集,mysql_escape_string则不用考虑。...($id)); echo ""; //htmlspecialchars() var_dump(htmlspecialchars($username)); echo ""; //addslashes...() var_dump(addslashes($username)); echo ""; //mysql_real_escape_string() var_dump(mysql_real_escape_string
具体分析一下原理: 正常情况下GPC开启或者使用addslashes函数过滤GET或POST提交的参数时,我们测试输入的',就会被转义为\'; 若存在宽字节注入,输入%df%27时,经过单引号的转义变成了...SQL语句是SELECT * FROM news WHERE tid='{$id}',根据文章的id把文章从news表中提取出来,在$sql之前,我们只用了限制函数addslashes函数,对$id进行转义...故只要低位的范围中含有0x5c的编码,就可以进行宽字节的注入 利用mysql_real_escape_string解决问题 一些cms把addslashes替换为mysql_real_escape_string...报错说明我们錦被iconv从utf-8转换成gbk后,变成了%e5%5c,而后面的'被addslashes变成了%5c%27,这样组合起来就是%e5%5c%5c%27,两个%5c就是\,正好把反斜杠转义了...矫正人们对于mysql_real_escape_string的误解,单独调用set name=gbk和mysql_real_escape_string是无法避免宽字符注入问题的。
id=5%20and%201=2%df%27%20and%201=2%23 我们提交的语句是 and 1=2 %df'and 1=1%23 原理 %df%27= >(addslashes)>%df%...character_set_client>根据character_set_connection转码>更新数据库时转化成字段 所对应的编码 宽字节注入修复 使用mysql_set_charset(GBK)指定字符集 使用mysql_real_escape_string...php $a=addslashes($GET['id']); $b=urldecode($a); echo '$a='.$a; echo ''; echo '$b='.$b; ?...> addslashes函数,将单引号等字符 转义变成\’。
PHP 中使用 addslashes() 函数转义字符串。所谓字符串转义,就是在某些特殊字符前面加上转义符号\,这些特殊字符包括单引号'、双引号"、反斜线\与空字符NUL。...addslashes() 函数的语法格式如下: string addslashes ( string $str ) 该函数返回转义后的字符串,参数 $str 是要被转义的字符。...一个使用 addslashes() 的例子是往数据库中输入数据,例如将名字O'reilly插入数据库中,就需要对其进行转义。...php $str = "I don't love you"; echo addslashes($str); ?...php $str = "I don't love you"; $str1 = addslashes($str); echo $str1 .
addslashes($_GET['id']) : 1; $query = "SELECT * FROM users WHERE id ='{$id}' "; $result = mysql_query...宽字符注入的修复: 方案一:指定php连接mysql的字符集 mysql_set_charset('gbk',$conn); $id =mysql_real_escape_string($_GET['id...0x05 全局防护盲点 1、str_replace函数 过滤单引号等,可能造成注入; 2、stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。...2、PHP内置转义函数 Addslashes() http://php.net/manual/zh/function.addslashes.php magic_quote_gpc http://php.net.../manual/zh/info.configuration.php#ini.magic-quotes-gpc mysql_real_escape_string() http://php.net/manual
这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。...php 判断是否开启get_magic_quotes_gpc功能了,以方便我们是否决定使用addslashes这个函数了。...addslashes($c):$c; switch($t){ case 'text': $c=($c!='')?"'".$c."'"...is_numeric($value)) { $value = “‘” . mysql_real_escape_string($value) . “‘”; } return $value; }
mysql_real_escape_string( string sqlQuery ) : ●转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集。...addslashes() : 在将一些数据插入到数据库中时,这个函数会非常有用,它可以在单引号前加上反斜杠,使得数据在插入时不会出现错误。...如果此时你对输入的数据作了addslashes()处理,那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。 2....对于PHP magic_quotes_gpc=off 的情况 必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出,因为addslashes()并未将反斜杠一起写入数据库...【stripslashes() :删除由 addslashes() 函数添加的反斜杠。】 htmlentities() : 一个非常有用的用来处理输出的函数。
解析 比如前面所注册的admin '#账号,在注册时,后端对其进行了转义( addslashes() 或者mysql_real_escape_string和mysql_escape_string 等)
php @$_str = $_GET['str']; //print_r($_str); $_temp = '$str="'.addslashes($_str).'";';...@print_r($_temp); @eval('$str="'.addslashes($_str).'";'); ?...str=${${assert($_POST[x])}} 密码:x 成功拿到shell 0x04 总结 成功学习了一波,同时可以出去吹水了,addslashes()在编码UTF-8时,也是可能绕过的~