所谓SQL注入:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。也就是说用sql代码登入你想进的网站,但是你没有账号或密码或是你有一个账号,你就可以用sql注入进入相关的网站,提前你想要的信息。
密码SQL注入:
比如:我的用户名是:foo 密码是:‘or‘1'=’1
sql语句在查询时就变成了下面一句话:
$sql = “select count(*) as ctr from users where username=’foo’ and password=” or ‘1′=’1′ limit 1″;
很明显,现在变成又多了一个条件1=1?只要两个条件有一条符合,就可以返回1,所以foo可以在密码为空的情况可以登录网站。
用户名SQL注入:
比如:填好正确的用户名(marcofly)和密码(test)后,点击提交,将会返回给我们“欢迎管理员”的界面。
sql如下:
$sql=“select * from users where username='marcofly' and password=md5('test')”;
很明显,如果给出正确的用户名和密码就能成功登录网站;但是,如果我们输入一个错误的用户名或密码呢?很明显,登入不了吧。恩,正常情况下是如此,但是对于有sql注入漏洞的网站来说,只要构造特殊的“字符串”,照样能够登入成功。
比如:在用户名输入框中输入:’ or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为:
$sql="select * from users where username='' or 1=1#' and password=md5('')";
语义分析:“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样就不会去执行了,换句话说,以下的两句sql语句等价:
$sql="select * from users where username='' or 1=1#' and password=md5('test')";
等价于
$sql="select * from users where username='' or 1=1";
因为1=1永远是都是成立的,即where子句总是为真,将该sql进一步简化之后,等价于如下select语句:
select * from users 没错,该sql语句的作用是检索users表中的所有字段。
有漏洞的脚本才有机会给你攻击,比如一个带参数的删除脚本a.asp?action=del&id=2你可以改为a.asp?action=del&id=2 or 1这样就有可能删除全部数据------sql注入就是通过类似的手段来破坏数据。
网友评论