[请益] 解决Blind SQL injection的问题

楼主: techcrpa (我还能说什你已经不爱我)   2019-05-16 05:45:47
大家好
我原本一直以为要解决SQL injection就是把参数都做过一番处理
把可能造成问题的字符字串都清除掉就没事了
怎知最近收到资安报告有3个程式都说有Blind SQL injection的高风险存在
这3个程式共同点就是都没有任何参数(也就是$_GET[]是empty、QUERY_STRING是'')
报告中的测试语法是:
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML,
like Gecko) Chrome/41.0.2228.0 Safari/537.21
X-Forwarded-For: 0'XOR(if(now()=sysdate(),sleep(0),0))XOR'Z
X-Requested-With: XMLHttpRequest
Connection: keep-alive
Accept: */*
Accept-Encoding: gzip,deflate
Host: xxx.xxx.xxx.xxx
坦白说....我看不太懂
是指骇客可以用XFF写入这串语法造成程式无法执行吗@@
但目前查了一下相关资料似乎大部分
先不论在XFF自行输入这串语法透过HTTP会造成什么样的作用
但如果这是问题来源
我目前规划的解决方式有几种,但不晓得到底方向正不正确,所以想请教大家:
方案1:
先检查 $_SERVER["HTTP_X_FORWARDED_FOR"] 看有没有乱七八糟的字串
理论上应该都是IP(也就是必须一定是 [数值.数值.数值.数值] 的格式)
如果不是就一律封杀
不晓得会不会有什么副作用反而连不该封杀的也封杀了?
还有Header里面除了XFF是不是其他地方也必须有此防范?
方案2:
检查 QUERY_STRING 看是不是空白或者 $_GET 是不是empty
不是的话也一律封杀
(虽然这样做好像没有意义 因为原本这些程式就完全没有处理参数?)
以上问题还请大家指教和指正
也谢谢大家耐心看完
作者: crossdunk (推嘘自如)   2019-05-16 10:58:00
怎么不用pdo就好
作者: tecnniv (想,不想)   2019-05-16 12:52:00
pdo是不是唯一解啊@@ 哭哭
作者: MOONRAKER (㊣牛鹤鳗毛人)   2019-05-16 13:48:00
别的lib如果有prepared statement也可以啦
作者: crossdunk (推嘘自如)   2019-05-16 14:05:00
你是用分身回推文吗= =
作者: tecnniv (想,不想)   2019-05-16 16:25:00
电脑和手机用不同嘛XD 所以不用去处理header的内容分析只要先处理好prepared statements就好了(通过弱扫)?不对啊? 我还是不太懂 像这种写进Header里面的语法 跟数据库的关联是? 为什么透过pdo和prepared statements来存取数据库就同样能够处理这样状况呢?
作者: a0960330 (ViperLiu)   2019-05-16 19:07:00
就算有prepare statements,弱扫工具会知道?
作者: st1009 (前端攻城师)   2019-05-16 19:33:00
方案一莫忘IPv6
作者: Crow22312 (乌鸦)   2019-05-17 02:27:00
查看看有没有把 IP 纪录到数据库的程式片段吧网络上取得使用者 IP 的范例十个有九个会依序巡过包含这个 header 的, 如果有又没挡就像他扫的一般中标啦
作者: tecnniv (想,不想)   2019-05-17 03:23:00
有的 就是做了这纪录然后抓到XFF不少不是ip而是OR XOR跟一些诡异逻辑判断式
作者: Crow22312 (乌鸦)   2019-05-17 04:03:00
所以这个 header 跟 sql injection 的关联就确定了吧只要有机会被玩填字游戏就算是漏洞, 邪恶者总是有办法出奇不意的塞东西, 特殊条件下 (字集) 也是有机会躲过preg_replace 之类的土制筛选手法.. 所以最理想还是交给 pdo 去处理.. (当然 prepar statement 下错依然..夜半脑子不清楚更正一下.. 字集的漏洞是针对 pdo 的,regexp 的则是另有一堆, 像是这篇里的 [0x01]https://www.exploit-db.com/papers/17934

Links booklink

Contact Us: admin [ a t ] ucptt.com