[摘要]
例如某网页需要你输入用户名称和口令,这样就有两个文本框等待你的输入,现在我们假设有一用户adam,我们不知道他的口令,却想以他的身份登陆。
正常情况下,我们在第一个文本框输入adam,第二个文本框输入1234之类的密码,如果密码正确就可以进入,否则报错。
程序中的查询语句可能是:
sql="select * from user ...
例如某网页需要你输入用户名称和口令,这样就有两个文本框等待你的输入,现在我们假设有一用户adam,我们不知道他的口令,却想以他的身份登陆。
正常情况下,我们在第一个文本框输入adam,第二个文本框输入1234之类的密码,如果密码正确就可以进入,否则报错。
程序中的查询语句可能是:
sql="select * from user where username="&text1.value&" and passwd= "&text2.value&""
执行时候就是
select * from user where username=adam and passwd=1234
好了,
如果我们在text2里输入的不是1234,而是1234"&"or 1=1
我们的sql语句就成了,
select * from user where username=adam and passwd=1234 or 1=1
我们就可以进入了。。。
有经验的用户就在程序中增加对单引号等特殊字符的过滤。
但是,一般人习惯上有两种登录认证方式我就用ASP的VBScript做例子了:
一是用select * from ... where username = & Request.Form("username") & "password = " & Request.Form("password"),然后判断结果是否为空来验证。其实还有一种方式:
用select * from ... where username = & Request.Form("username"), 然后判断结果集中的密码是否和输入相同来验证,这种方式就安全一些了。