SQL Inject注入漏洞的防范(都是概念)

1.代码层面
1.对输入进行严格的转义和过滤。

转义:对前端传输来的数据进行转义,把一些特殊符号(单引号,双引号等等)进行转义。

过滤:不让输入一些特殊的内容(比如恶意的代码),这是在输入层面进行的,不推荐(不是最好的方法,该方法是转义加过滤,黑名单的方法)。因为有时候数据库升级,会多一些新的特殊符号,这些又会导致sql漏洞的出现。


最好的方法:
2.使用预处理和参数化(Parameterized)

**预处理+参数法:**使用PDO的prepare预处理。
PDO:统一的,各种数据库的返回接口,通过它提供的函数和方法来操作数据库。
PDO里边不会把参数直接传进去,它是用参数的方式去写参数。
与数据库进行交互:它先不传参数,而是进行预处理,然后再把参数传进去,最后你传入sql中,都只会是一个整体,所以就不存在语句拼接了。

PDO和数据包默认有两次交互,一个是先预处理,然后再传参数。(彻底避免了,拼接sql这种做法)


2.网络层面
1.通过WAF设备启用防SQL Inject注入策略(或类似防护系统)
部署应用防火墙:WAF。 即使你的网站存在sql注入漏洞,但是攻击者在使用payload进行渗透时候,这种WAF防火墙就会拦截下来,阻断掉这种恶意的payload。如图:
SQL Inject注入漏洞的防范(都是概念)
我们需要清楚的是,我们不能把希望寄托在后端的开发代码,和这种WAF类似的防火墙。在真实的防御过程中这两个都要同时推进。


2.云端防护(360网站卫士,阿里云盾等)
现在很多企业的服务都会去过云端,类似于WAF。如图:
SQL Inject注入漏洞的防范(都是概念)