我试图检查一个网站的sql注入攻击,并惊讶地发现它不是非常非常简单的预防,因为下面是简单的代码。
$sql="select * from user_acount where login_id='".$username."' and password='".$password."' and status='1' ";我不能做任何sql注入来测试它。我写了以下内容
第一次尝试检查sql注入
Login: admin'--
Password:'i typed nothing here '结果密码错误,您无法登录。
第二个:
Login: admin or 1=1 --'
Password:''结果密码错误,您无法登录。
第三:
Login: admin' or 1=1
Password:''4:登录名: admin或1=1'--密码:‘’
结果密码错误,无法登录。
有没有人能解释一下是什么阻止了我?我没有使用预准备语句,也没有使用任何filter类,也没有使用real_escape_string?
发布于 2011-06-15 17:19:00
有两种可能性:
admin的login_id,因此查询如下:select * from login_id='admin'
magic_quotes已启用的user_acount,结果查询如下:select * from user_acount where login_id='admin\'--‘and password='’and status='1‘select * from user_acount where login_id='admin or 1=1 --\'’and password='‘and status='1’
最后一个查询总是会失败,即使魔术引号被关闭了:
select * from login where login_id='admin or 1=1 --'‘and password='’and status='1‘
由于字符串中的--注释不起作用,因此查询的解释如下:
select * from user_acount where login_id=‘STRING’、password='‘和status='1’
如您所见,这将导致在'STRING'之后出现语法错误
发布于 2011-06-15 17:18:16
$_REQUEST['username']或related,而不是$username).admin'--存储在$username中(例如,表单元素名称与变量名称不匹配)。发布于 2011-06-15 17:19:11
您正在输入包含引号的密码。这会破坏您的SQL查询,并且代码可能无法区分错误和合法的“没有这样的用户”结果,因此您会得到错误的密码消息。
尝试将密码保留为空。
https://stackoverflow.com/questions/6355494
复制相似问题