作者techcrpa (我还能说什你已经不爱我)
看板PHP
标题[请益] 解决Blind SQL injection的问题
时间Thu May 16 05:45:47 2019
大家好
我原本一直以为要解决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
不是的话也一律封杀
(虽然这样做好像没有意义 因为原本这些程式就完全没有处理参数?)
以上问题还请大家指教和指正
也谢谢大家耐心看完
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.124.101.142
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1557956749.A.975.html
※ 编辑: techcrpa (140.124.101.142), 05/16/2019 06:15:11
1F:→ crossdunk: 怎麽不用pdo就好 05/16 10:58
2F:推 tecnniv: pdo是不是唯一解啊@@ 哭哭 05/16 12:52
3F:→ MOONRAKER: 别的lib如果有prepared statement也可以啦 05/16 13:48
4F:推 crossdunk: 你是用分身回推文吗= = 05/16 14:05
5F:推 tecnniv: 电脑和手机用不同嘛XD 所以不用去处理header的内容分析 05/16 16:25
6F:→ tecnniv: 只要先处理好prepared statements就好了(通过弱扫)? 05/16 16:25
7F:推 tecnniv: 不对啊? 我还是不太懂 像这种写进Header里面的语法 跟资 05/16 16:53
8F:→ tecnniv: 料库的关联是? 为什麽透过pdo和prepared statements来存 05/16 16:54
9F:→ tecnniv: 取资料库就同样能够处理这样状况呢? 05/16 16:54
10F:推 a0960330: 就算有prepare statements,弱扫工具会知道? 05/16 19:07
11F:推 st1009: 方案一莫忘IPv6 05/16 19:33
感谢st大!!!!
我的确忘了这件事@@
我修改完会去辨识是IPv4或IPv6这两种回传的IP了(还真的是有IPv6的来源...)
12F:推 Crow22312: 查看看有没有把 IP 纪录到资料库的程式片段吧 05/17 02:27
13F:→ Crow22312: 网路上取得使用者 IP 的范例十个有九个会依序巡过包含 05/17 02:29
14F:→ Crow22312: 这个 header 的, 如果有又没挡就像他扫的一般中标啦 05/17 02:29
15F:推 tecnniv: 有的 就是做了这纪录然後抓到XFF不少不是ip而是OR XOR跟 05/17 03:23
16F:→ tecnniv: 一些诡异逻辑判断式 05/17 03:23
17F:推 Crow22312: 所以这个 header 跟 sql injection 的关联就确定了吧 05/17 04:03
18F:→ Crow22312: 只要有机会被玩填字游戏就算是漏洞, 邪恶者总是有办法 05/17 04:05
19F:→ Crow22312: 出奇不意的塞东西, 特殊条件下 (字集) 也是有机会躲过 05/17 04:06
20F:→ Crow22312: preg_replace 之类的土制筛选手法.. 所以最理想还是 05/17 04:06
21F:→ Crow22312: 交给 pdo 去处理.. (当然 prepar statement 下错依然.. 05/17 04:07
22F:推 Crow22312: 夜半脑子不清楚更正一下.. 字集的漏洞是针对 pdo 的, 05/17 04:22
23F:→ Crow22312: regexp 的则是另有一堆, 像是这篇里的 [0x01] 05/17 04:23
谢谢Crow大
这网页超详尽 这样我完全明白了
目前已经都改成pdo的prepared statements了
谢谢大家的帮忙
※ 编辑: techcrpa (61.216.122.103), 05/20/2019 17:24:09