SQL注入的攻击与防御(简单篇)

来源:互联网 发布:手机刷软件 编辑:程序博客网 时间:2024/06/05 00:18
原理:SQL注入攻击值得是通过构建特殊的输入作为参数传入web应用程序,而这些输入大都是SQL语法里的一下组合,
通过执行SQL语句进执行攻击者所要的操作,其主要原因是程序没有细致的过滤用户输入的数据,致使非法数据侵入系统。


SQL注入的产生原因:
 不当的类型处理,不安全的数据库配置, 不合理的查询集处理, 不当的错误处理, 转义字符处理不合适, 多个提交处理不当


SQL注入方法一般有两种:
方法一:采用直接猜表名和列名的方法或者是利用报错信息来确定表明和列名
And (Select count(*) from 要猜的表名)<>0  
    And (Select count(要猜的列名) from 已知的表名)<>0
注意:<>在sql中是不等于,结果若返回正确则猜的表名和列名是正确的


方法二:后台身份验证绕过漏洞
  此方法利用的就是AND和OR的运算规则,从而造成后台脚本逻辑性错误
  若后台的查询语句为sql='select admin from t_admin where user='request("user")' and passwd='request("user")';
但输入用户名密码若为  'or 'a'='a',那么查询语句就变成了select admin from t_admin where user=''or 'a'='a' and passwd=''or 'a'='a';
这里就变成了四个查询语句即: 假 or 真 and 假 or 真, 先算and再算or,就变成: 假or 假 or真,结果为真,就能直接接入后台了。
不过要想用这种方法进行攻击,必须具备一个条件:是这种用户名和密码在一个查询语句中。 或者可以 'or 1=1 --  (--为sql注释符)


简单的SQL注入防御方法:
 1、首先要对输入的数据进行过滤,将常见的sql语句的关键词:select or ' " 等字符进行过滤。
 2、对在数据库中对密码进行加密,验证登陆的时候先将 密码进行加密再与数据库中加密的密码进行对比,若此时一致则基本是安全的。
 3、对数据库中密码采用常用的MD5加密时尽量在字符串的前边和后边加上指定字符后在进行加密,这样即便是看到了数据库也很难破解密码。

后续通过深入的试验和理解会给出高级篇,有错误欢迎大家指正,一块学习!

0 0