SQL Inject漏洞的防范

SQL Inject常见防范措施
代码层面:
1.对输入进行严格的转义和过滤
2.使用预处理和参数化(Parameterized)

网路层面:
1.通过WAF设备启用防SQL Inject注入策略(或类似防护系统)
2.云端防护(360网站卫士,阿里云盾等)

措施:
防范措施+过滤
以PHP为例:
SQL Inject注入漏洞的防范PHP防范转义+过滤
转义举例:
function escape( link , date){
if(is_ string(data)){
return mysq1i_real_escape_string(link, data);
if(is_array(data)){
foreach (data as key=>va1){
data[key]=escape(link, va1);
}
}
return data;
}
link 和date后都需要加$
使用函数从前端输入进来的数据进行转义,将输入的特殊符号比如说:“单引号双引号斜杠等等。”用MySQL里面的方法,像上述例题,用MySQL_real_escape_string对其转义。不为最优解。
过滤举例: ( 黑名单)
str. replace("%"",$POST’username’]),把post里面的数据里面含有%的替换成空
黑名单机制,数据库升级较快,新的内容出来了,一个新的特殊符号可能也会造成SQL注入漏洞。
SQL Inject注入漏洞的防范-PHP防范案例-PDO预处理(推荐)
SQL Inject注入漏洞的防范PHP防范案例-PDO预处理(推荐)
推荐的做法:使用PDO的prepare预处理(预处理+参数化)
$ username= G E T [ ′ u s e r n a m e ′ ] ; ( G E T 前 有 _ GET[ ' username '] ; (_GET前有 GET[username];(GET符号)
$ password= $
GET[ ’ password’];
try{
$pdo=new PDO( ’ mysql : host= localhost ; dbname=ant’, ‘root’ ,’ root’ );
$sq1=" select * from admin where username=? and passowrd=?" ;
s t m t = stmt= stmt=pdo->prepare ($ sql);//先不传参数,先预处理,用占位符的方式代替参数内容与数据库内容去交付,通过预处理(preaper),先把SQL的这条逻辑进行执行和编译
//
var_ dump( $stmt);
$ stmt>execute(array( u s e r n a m e , username, username,password)); stml前有
//这个时候在把参数传进去,以索引数组的方式传进去,而不是拼接,就成功防止了注入
}catch (PDOException $e){
echo $e->getMessage();
}
?>
不管构造的是什么东西是payload或者由自己构造闭合的东西最终传到SQL里面的时候总会当作是一个整体,而不会去与原有的SQL语句进行拼接。
通过pdo彻底避免拼接SQL

使用WAF(Web application firewall)Web应用防火墙,攻击者通过网络去利用数据库的漏洞时,防火墙会通过web传递一些对应的payload,该防火墙会把payload识别出来,会阻断恶意payload的漏洞,将其阻断掉。
安全开发时:
在甲方安全建设过程中,同时推进两个步骤
1.推进开发人员去安全的,使用预处理,做相关的数据库操作
2.在应用程序层面部署web防火墙
通过云端防护集群
云端防护集群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值