你可以试着将输入使用者名称的内容与程序代码列表 2 的 SQL 语法做个整理,将会发现实际传给 SQL Server 的语法如下
SELECT * FROM tblUser WHERE UserName=''''admin''''--'''' AND Password=''''asdf''''
关键就是原先的 AND 子句被 “--" 标示成说明,也就是 SQL Server 仅仅执行
SELECT * FROM tblUser WHERE UserName=''''admin''''
自然,若有该使用者存在,则这个 SQL 查询语法就传回该记录的所有字段内容。再按照程序代码列表 2 的判断方式:传回的 Recordset 是否有记录,若有就算登入验证成功。则骇客就可以轻易地以该使用者的身分进入了。用未知的使用者名称登入:若没有已知的帐号,也可以用以下的方式输入到使用者名称字段,便能大大方方地侵入:
‘ or 1=1--
SQL Server 所接收的整个语法变成:
SELECT * FROM tblUser WHERE UserName='''''''' or 1=1--'''' AND Password=''''asdf''''
因为加上的 or 1=1,则不管之前的条件为合,只要某个条件为真,整个判断式就都为真,因此回传的 Recordset 对象包含了全部的会员记录。也导致程序代码列表 2 中的 Recordset 对象
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18