浅谈如何防止sql注入

​认识SQL注入

 

 

什么是SQL注入,百度给大家解释的很清楚了!这里不过多介绍,帮大家复制过来。

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

 

如何防止SQL注入

 

有句老话说的好,有人的地方就会有江湖。SQL注入也有这么一句老话,叫有输入的地方就可能存在SQL注入,那么我们该如何去防止SQL注入呢!SQL注入产生的原理归根结底还是用户输入的代码被数据库执行了,所以解铃还须系铃人,防御SQL注入还是要在代码层面上去解决。

 

解决方案

 

方案一

采用预编译技术

        INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)

        使用预编译的SQL语句,SQL语句的语义不会是不会发生改变的。预编译语句在创建的时候就已经将指定的SQL语句发送给了DBMS,完成了解析,检查,编译等工作,所以攻击者无法改变SQL语句的结构,只是把值赋给?,然后将?这个变量传给SQL语句。当然还有一些通过预编译绕过某些安全防护的操作,大家感兴趣可以去搜索一下。

 

方案二

严格控制数据类型

        在java、c等强类型语言中一般是不存在数字型注入的,因为在接受到用户输入id时,代码一般会做一个int id 的数据类型转换,假如我们输入的是字符串的话,那么这种情况下,程序就会报错。但是在PHP、ASP这些没有强调处理数据类型的语言,一般我们看到的接收id的代码都是如下等代码。

$id = $_GET['id'];

$SQL = "select * from '某字段' where id = $id;";

这样的代码攻击者就可以通过构造id参数运用联合查询等手法进行SQL注入,假如这里我们加入一个检查数字类型函数is_numeric()这样就可以防止数字型注入了。

 

方案三

对特殊的字符进行转义

        数字型注入可以通过检查数据类型防止,但是字符型不可以,那么怎么办呢,最好的办法就是对特殊的字符进行转义了。比如在MySQL中我们可以对" ' "进行转义,这样就防止了一些恶意攻击者来闭合语句。当然我们也可以通过一些安全函数来转义特殊字符。如addslashes()等,但是这些函数并非一劳永逸,攻击者还可以通过一些特殊的方式绕过。

 

总结

 

当然防止SQL注入的手段肯定不止这些,但因为能力有限,就先写这么多了,以后学习到了新技能在写给大家,师傅们也可以自己发散思维想一想,或者百度查一查。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值