SQL注入的防御
应用层防御
1、应用层防御的目标
(1)SQL注入的本质原因是应用层的问题
(2)SQL注入应用层防御的目标是修复SQL所有可能的漏洞,做好事前的防范
2、过滤SQL注入基本字符
’ 或者 " :字符串闭合
– 或者 # :单行注释
/* */ :多行注释
+:加号,URL中替换空格拼接字符
concat :字符拼接
% :通配符
?Param1=foo&Param2=bar :url参数
select :url打印常量等
@variable :本地变量
@@variable:全局变量
sleep 10:睡眠10秒
3、过滤SQL关键字(保留字)
4、URL传参的整体加密
系统层防御
1、系统层防御的目标
(1)SQL注入的本质原因不是由系统层的问题
(2)系统层的防御是辅助的作用,是预防SQL注入与系统层交互提权,预防SQL注入权限的进一步扩大,使得SQL注入在系统层无所作为。
2、系统层防御的方法
(1)Iptables限制只允许特顶的服务器IP和端口登录
(2)使用应用防火墙对SQL注入拒绝waf
(3)数据库安全中间件,如greenSQL,安全狗等
数据库层防御
1、数据库层防御目标
(1)SQL注入的本质原因并不是数据层的问题
(2)数据库层防御的目标是辅助性的,预防SQL注入在数据层交互提权,防止SQL注入成功后权限和数据泄露进一步扩大。
2、SQL权限的最小化原则
(1)程序连接的权限分配以最小化为原则,能省就别大方
(2)如大多数据程序连接都是以select,insert,update和delete权限,那么就只给这些权限。这样,对于读取系统层文件所需要的FILE权限就没有,那么与系统层交互提权的路径就被堵上了,使得SQL注入无所作为。
3、数据库层设计规范化要求
|