对于那些后台验证不严格的登陆验证程序,可以用 'or'='or' 来进行登陆,其原理是绕过后台的数据库查询语句。
示范代码(危险!请勿复制使用!)
- '省略数据库连接等
- Sql="Select Name,grade From user Where Name='" & Request.Form("Name") & "'and Password='" & Request.Form("Password") & "'"
- Rs.Open Sql,Conn
- If Rs.Eof Then
- Response.Write "用户名或密码错误,请重新登录!"
- Else
- Session("User")=Rs("Name")
- Session("Grade")=clng(Rs("Grade"))
- Rresponse.redirect "index.asp"
- EndIf
- ......
对于以上的SQL查询,没有对提交的数据进行任何过滤以确保所提交的字符串中不含非法语句,这是很危险的做法!
如果在用户名和密码处都填上 'or'='or' 可以构造出这样的语句
- Select Name,grade From user Where Name=''or'='or''and Password=''or'='or''
根据逻辑可知 假or假or真 and 假or假or真 的值为真,所以对于这个查询,总能匹配数据表中已有的任意条目
所以程序接下来的登陆判断便不起作用,被成功地绕过了。
其实用 'or' 就可以达到这个效果,但一般会有用户名不得少于n个字符的限制,所以可以加长为 'or'='or' 甚至是 'or'something_here'or' 皆可。