18622800700
News
必火安全学院,网络安全的黄埔军校

我对sql注入的认知

日期:2019年11月11日 15:23 访问:931 作者:必火安全学院
 关于SQL注入
1.什么是sql注入
sql注入是一种将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手段。
2.sql注入原理
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
3.如何寻找注入点
首先,web应用中输入有三点:get post http头信息
(1)[敲黑板!]咱先掰扯掰扯这个get信息请求!
get信息请求,获取文章id返回文章内容。
但是当我们在get传递的id参数值后加“'”单引号,请求结果可能会出现数据库异常错误.
如果出现了这说明啥?
 当然是存在注入漏洞咯。
(2)post请求,提交文章标题和文章内容,添加入库,正常情况是,在输入框输入正常的内容,就是很正常的那种!就是像我下面写的这样!就不找实例截图了哈。
标题:震惊!男子下班回家,发现父亲和老婆竟做出这种事……
内容:某男子下班回到家中发现自己的芭比和媳妇儿竟联手做出一道好菜!太牛逼了!
此时呢,提交入库的sql如下
INSERT INTO article(title, content) VALUES('标题','内容')
但是当我们把标题框或者内容框里输入的内容后加上    "    ,提交后可能就会触发sql异常。
4.如何进行sql注入攻击
(1)加单引号
URL: www.xxx.com/text.php?id=1' 
对应sql: select * from table where id=1'
这是一条错误的sql语句,如果页面返回异常,则说明我们输入的单引号被当做sql语句带了进去。若返回正常则说明我们输入的单引号被过滤了,如果想对此网站进行注入攻击只能试着绕狗了。
(2)加and 1=1 
URL:www.xxx.com/text.php?id=1 and 1=1
对应的sql:select * from table where id=1 and 1=1 语句执行正常,与原始页面无差异;
(3)加and 1=2
URL: www.xxx.com/text.php?id=1
对应的sql:select * from table where id=1 and 1=2









SQL注入防范
了解了SQL注入的方法,如何能防止SQL注入?如何进一步防范SQL注入的泛滥?通过一些合理的操作和配置来降低SQL注入的危险。
 
使用参数化的过滤性语句
 
要防御SQL注入,用户的输入就绝对不能直接被嵌入到SQL语句中。恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。然后,用户输入就被限于一个参数。
 
输入验证
 
检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。
 
在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如Regular Expression Validator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过Custom Validator自己创建一个。
 
错误消息处理
 
防范SQL注入,还要避免出现一些详细的错误消息,因为黑客们可以利用这些消息。要使用一种标准的输入确认机制来验证所有的输入数据的长度、类型、语句、企业规则等。
 
加密处理
 
将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了"消毒"处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。
 
存储过程来执行所有的查询
 
SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。
 
使用专业的漏洞扫描工具
 
攻击者们目前正在自动搜索攻击目标并实施攻击,其技术甚至可以轻易地被应用于其它的Web架构中的漏洞。企业应当投资于一些专业的漏洞扫描工具,如大名鼎鼎的Acunetix的Web漏洞扫描程序等。一个完善的漏洞扫描程序不同于网络扫描程序,它专门查找网站上的SQL注入式漏洞。最新的漏洞扫描程序可以查找最新发现的漏洞。
 
确保数据库安全
 
锁定你的数据库的安全,只给访问数据库的web应用功能所需的最低的权限,撤销不必要的公共许可,使用强大的加密技术来保护敏感数据并维护审查跟踪。如果web应用不需要访问某些表,那么确认它没有访问这些表的权限。如果web应用只需要只读的权限,那么就禁止它对此表的 drop 、insert、update、delete 的权限,并确保数据库打了最新补丁。
 
安全审评
 
在部署应用系统前,始终要做安全审评。建立一个正式的安全过程,并且每次做更新时,要对所有的编码做审评。开发队伍在正式上线前会做很详细的安全审评,然后在几周或几个月之后他们做一些很小的更新时,他们会跳过安全审评这关, "就是一个小小的更新,我们以后再做编码审评好了"。请始终坚持做安全审评。