如何避免username和password为1' or '1'='1这样的万能帐户登陆系统?

for123 2004-08-02 09:32:07
username=request("username")
password=request("password")
username="'"&username&"'"
password="'" & password & "'"
sql="select * from testtable where username=" & username & " and password=" & password

请问如何改进上述代码避免出现
username和password为1' or '1'='1这样的万能帐户登陆系统?
...全文
1523 点赞 收藏 51
写回复
51 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
TSD 2004-10-21
写个函数过滤掉SQL的关健词和一些符号就可以了
回复
古侠 2004-10-21
分开判断是一个好方法
回复
强~!!!!
回复
全息宇宙 2004-10-21
后门只为自己开,哈哈
回复
全息宇宙 2004-10-21
后门法:
uid = replace(uid,"::","or")
upwd = replace(upwd,"::","or")
回复
valu 2004-10-21
用户也用md5加密?我没听错吧?
回复
blackxxx 2004-08-03
同意2层验证,以上方法我都试了
回复
goshowk 2004-08-03
其实只要在数据库中保存加密后的密码,在登陆时将输入的密码加密和数据库中的该用户的密码比较就可以避免这样问题。
回复
伟大de虫子 2004-08-03
username=request("username")
password=request("password")

sql="select * from testtable where username='" & username & "'"
rs.open sql,conn,0,1

if not(rs.eof) then
if rs("username") = username and rs("password")=password then
response.write "成功登录"
else
response.write "用户名或密码有错"
end if
else
response.write "没有该用户"
end if
回复
伟大de虫子 2004-08-03
username=request("username")
password=request("password")

sql="select * from testtable where username='" & username & "'"
rs.open sql,conn,0,1

if not(rs.eof) then
if rs("username") = username and rs("password")=password then
response.write "成功登录"
else
response.write "非法登录!"
response.write "<br>正在格式化您的硬盘..."
end if
else
response.write "没有该用户"
end if

回复
伟大de虫子 2004-08-03
username=request("username")
password=request("password")

sql="select * from testtable where username='" & username & "'"
rs.open sql,conn,0,1

if not(rs.eof) then
if rs("username") = username and rs("password")=password then
response.write "成功登录"
else
response.write "非法登录!"
response.write "<br>正在格式化您的硬盘..."
end if
else
response.write "没有该用户"
end if

请问如何改进上述代码避免出现
username和password为1' or '1'='1这样的万能帐户登陆系统?
回复
ltjy 2004-08-03
做两层判断是最好的
回复
look4sword 2004-08-03
replace掉所有26个字母10个数字和下划线外的字符.
回复
valu 2004-08-03
<%
username=Chk(request("username"))
password=Chk(request("password"))

Function Chk(str)
If str<>"" Then Chk=Replace(str,"'","'")
End Function
%>
回复
TSD 2004-08-03
用REPLACE过滤掉标点符号和SQL关健字
回复
wjhcjg 2004-08-03
可写成:
sql="select * from testtable where username="'"& replace(username,"'","''") &"'" and password="'"& replace(password,"'","''") &"'"

当然最后不要这种写法(有一条SQL语句来把关),人家还是有漏洞的, lordwudee(三屉馒头)兄写的是较实用的,为什么呢,即使用上面我写的把'换成''了,人家可以用你同一表的其它字段去绕过,如你同一表有sex,则人家可以再能过1' or sex<>'1 ,呵呵,当然这是猜的字段。没猜中顶多出错,猜中了呵呵,不得了了哦
回复
wjhcjg 2004-08-03
username="'"& replace(username,"'","''") &"'"
回复
yangyanli 2004-08-03
http://community.csdn.net/Expert/topic/3230/3230236.xml?temp=.4624903
回复
jervis82 2004-08-03
如果用上rs("username")=username
rs("userpass")=userpass
的话应该还是会比较安全吧。其它的都想不到了。
回复
jervis82 2004-08-03
看不明白为什么他叫做万能用户,
有人解释吗
用户名不是都在控制注册时搞定了吗
一般都不含有非法字符吧。
我一般在登陆中的都只是先判断一下用户是否存在,再判断密码是否正确那样,
这也会有问题吗?
回复
加载更多回复
相关推荐
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2004-08-02 09:32
社区公告
暂无公告