string name = txtName.Text.Trim();修复or=or万能密码漏洞 10

stringname=txtName.Text.Trim();stringpassword=txtPassword.Text.Trim();如上代码如何修复or=or万能... string name = txtName.Text.Trim();
string password = txtPassword.Text.Trim();
如上代码如何修复or=or万能密码漏洞
本人分不多,但还是希望高手能帮忙解决下,再次感谢
我是外行,大家说的太专业了,能不能帮我修改下,或者给我一个教程链接,网上说的都是
pwd = replace(request.form("pwd"),"'","") //意思就是把'替换为空
name = replace(request.form("name"),"'","") //同上
可是我从login.asp和login.aspx里没找到相关代码。。。
展开
 我来答
手机用户18048
2011-03-21
知道答主
回答量:14
采纳率:0%
帮助的人:1.9万
展开全部
1)pwd = request.form("pwd") "获取客户端输入的密码,再把值赋给pwd"
(2)name = request.form("name") "获取客户端输入的用户名再把值赋给name"
都没有进行任何过滤
(3)Set rs = Server.CreateObject("ADODB.Connection") "利用Server对象的CreateObject方法创建ADO组件的Connection对象"
(4)sql = "select * from Manage_User where UserName='" & name & "' And PassWord='"&encrypt(pwd)&"'" "将用户名和密码放入查询语句中查询数据库"
(5)Set rs = conn.Execute(sql) "执行SQL语句"
(6)If Not rs.EOF = True Then "当前的记录位于Connection对象的最后一个记录之前"
(7)Session("Name") = rs("UserName") "将UserName的属性赋给Name的Session自定义变量"
(8)Session("pwd") = rs("PassWord") "将PassWord的属性赋给pwd的Session自定义变量"
(9)Response.Redirect("Manage.asp")了 "利用Response对象的Redirect方法重定向"Manage.asp"
(10)Else
(11)Response.Redirect "Loginsb.asp?msg=您输入了错误的帐号或口令,请再次输入!"
(12)End If
(13)end if
%>
知道原理之后 我们就可以修补了
把(1)(2)的内容修改成
pwd = replace(request.form("pwd"),"'","") //意思就是把'替换为空
name = replace(request.form("name"),"'","") //同上
为了保险后台最好设置登陆用户 登陆密码 还有验证码

参考资料: http://hi.baidu.com/wodetiankongxing/blog/item/4fa59910c3d9450c213f2ede.html

今天又喝粥
2011-03-21 · TA获得超过230个赞
知道小有建树答主
回答量:262
采纳率:50%
帮助的人:129万
展开全部
or=or?
or 1=1吧?
这个你在构造sql的时候,用传参的方式就不会有漏洞了。
select * from user where name=? and password=?
然后用设置参数的方式把name和password传入。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dhcc_212
2011-03-21
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
用预处理命令 PreparedStatement 链接JDBC就能解决此类问题,在构造sql的时候,用传参的方式就不会有漏洞了。
例:SQL正确格式 sql="select * from user where name=? and password=?";
SQL错误格式 sql="select * from user where name="+@name+" and password="+@password";
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蝶儿忙
2011-03-21 · TA获得超过1.1万个赞
知道大有可为答主
回答量:2629
采纳率:0%
帮助的人:0
展开全部
先取出用户名=name 的记录
如果没找到记录 表示登录失败
如果找到了记录 那么比较密码字段与 password是否相符 不相符表示登录失败
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
flyingFish211
2011-03-21 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.5万
采纳率:50%
帮助的人:1.2亿
展开全部
JAVA很容易啊。。用传参数得方式可以防止的
Statment stm = prepareStatement(sql);

stmt.setString(1, username);
stmt.setPassword(2, pwd);
....

参数化是最有效的防注入的方式了,干吗不用呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式