谈论SQL注入攻击的重要性

"SQL注入”是一种利用未过滤/未审核用户输入的攻击方法(“缓存溢出”和这个不同),意思就是让应用运行本不应该运行的SQL代码。黑客或者恶搞的用户,利用了程序开发人员在开发的时候没有对SQL进行严格的处理而造成的漏洞,然后输入的一些特殊符号而通过了SQL的判断,返回了本不该返回的数据到界面上,
如下图,我只想查询到第一条李德龙的数据

谈论SQL注入攻击的重要性

sql为:select * from t_huohuayuyue where t_username='李德龙' 这样在数据库执行时没有问题的,但是假如我是用户的话,我这样输入的话,这个SQL就有问题了,

谈论SQL注入攻击的重要性

我在界面文本框这样输入的话,李德龙' or '1'='1那这个SQL就成了

select * from t_huohuayuyue where t_username='李德龙' or '1'='1'

结果如下:

谈论SQL注入攻击的重要性

所以,这里就是一个典型的SQL漏洞,而且很多程序在写的时候,都没有进行很好的处理,而造成应用程序未响应,其实就是后天报错了,所以处理了,没有处理好的话,这时候,不应该出现的数据也会出现在屏幕上,当然还有很多不同的SQL注入攻击方式,比如%%,//,**,等等,这里就不一一说明了,下面我们说下在写代码的时候怎么去预防这种漏洞呢,

如下图,我在变量为字符串的后面用替换方法

谈论SQL注入攻击的重要性

这样,不管你界面怎么输,到SQL查询的时候,都能保证你的SQL是你想要的,不应该出现的就不会查到

当然,这也只是一种预防的方式,还有很多,比如在匹配我们的字符串为空的时候,我们一般的写法都是用目标字符串去匹配一个固定死的字符串,其实这样是不对的, 因为这样也是有非常大的漏洞,像这样

谈论SQL注入攻击的重要性

这样也存在很大的漏洞,因为字符串的空分为几种,null,"",'',undefined,如果变量在前面的话,我们这这样写就错了,很容易被攻击

那正确的写法是啥呢,如下图:

谈论SQL注入攻击的重要性

把目标字符串放前面,用目标的字符串去匹配变量,这样就很有效的防治了攻击,

谢谢大家