避免SQL注入

什么是SQL注入攻击

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

如何防止SQL注入

SQL有句老话,有输入的地方就有可能存在SQL注入,该如何防止SQL注入?SQL注入产生的原理归根结底还是用户输入的代码被数据库执行了,所有解铃还须系铃人,防御SQL注入还是要在代码层面上去解决

解决方案
方案一

采用预编译技术

INSERT INTO Table_name (id,name,age) VALUES(?,?,?)

使用预编译的SQL语句,SQL语句的语义是会发生改变的,预编译语句在创建的时候就已经将指定的SQL语句发送给DBMS(数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS) 完成了解析,检查,编译等工作,所以攻击者无法改变SQL语句的结构,只要把值赋给 “?” , 然后将 “?” 的变量传给SQL语句,当然还有一些通过预编译绕过某些安全防护的操作.

方案二

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

$id = $_GET[‘id’];
$SQL = “select * from ‘某字段’ where id = $id”;

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

方案三

对特殊类型的字符进行转义

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值