|
1 G9 Q$ ~- ]6 j* `- H
楼主指的SQL注入在原理上被根绝是指使用预编译吧其实SQL注入并没有死透,主要原因有四:1.预编译不能解决所有SQL注入:比如表名/列名/排序动态传入的场景,原因是这些地方不能预编译,因此很多人还是直接拼接的,且囿于对预编译的信赖,从外到里没有过滤。 W( }9 `3 I+ M5 k" Y! S" }% p: p
2.可以预编译的地方也有可能出现问题:注入一般爆发在LIKE语句/IN语句中,因为这两个地方的预编译写法都有些特殊,很多开发者懒得去搞,就直接拼接了3.在SQL语句的写法上,直接拼接比预编译简单太多了,没有接触过信息安全的初学者写出来的代码很大可能存在漏洞;就算是有经验的程序员,在快速上线的压力下,也没有时间再去考虑信息安全的问题。
: u5 p( B1 _& Z5 N% X% l 4.有太多有漏洞的老代码来不及或不能换上预编译,只能靠WAF苟活,而WAF这种东西本身就是在用户体验与安全性之间的一种矛盾集合体,总有被绕过的可能性最后,其实我想说的是,就新开发的系统来说,SQL注入漏洞确实越来越少了,做到这一点的不是大家的安全意识增强,都知道使用预编译了,而是。 / `7 y F/ p5 U0 l* H* U/ D' V
大量成熟的框架与组件,其本身自带有对安全性的考量,使开发者无感知的写出较为安全的代码SQL注入作为漏洞之王不会就此消失,漏洞从来都是环环相扣,褪去外网坚韧的防御,内网脆弱无比,拼接来自于人的懒惰,且永远不会缺席。
# N& q0 ~9 r9 I: @- C4 Q7 e6 s A/ o7 l# n* M3 C! K. i
, c: K; n1 `; P( I% m3 s" Z# D" }" g
) G' e: O/ R: t5 V. e u! e: C
) f: Y' a8 \( k A5 R% Y- `: ~
|