
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里没找到相关代码。。。 展开
string password = txtPassword.Text.Trim();
如上代码如何修复or=or万能密码漏洞
本人分不多,但还是希望高手能帮忙解决下,再次感谢
我是外行,大家说的太专业了,能不能帮我修改下,或者给我一个教程链接,网上说的都是
pwd = replace(request.form("pwd"),"'","") //意思就是把'替换为空
name = replace(request.form("name"),"'","") //同上
可是我从login.asp和login.aspx里没找到相关代码。。。 展开
5个回答
展开全部
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"),"'","") //同上
为了保险后台最好设置登陆用户 登陆密码 还有验证码
(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
展开全部
or=or?
or 1=1吧?
这个你在构造sql的时候,用传参的方式就不会有漏洞了。
select * from user where name=? and password=?
然后用设置参数的方式把name和password传入。
or 1=1吧?
这个你在构造sql的时候,用传参的方式就不会有漏洞了。
select * from user where name=? and password=?
然后用设置参数的方式把name和password传入。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用预处理命令 PreparedStatement 链接JDBC就能解决此类问题,在构造sql的时候,用传参的方式就不会有漏洞了。
例:SQL正确格式 sql="select * from user where name=? and password=?";
SQL错误格式 sql="select * from user where name="+@name+" and password="+@password";
例:SQL正确格式 sql="select * from user where name=? and password=?";
SQL错误格式 sql="select * from user where name="+@name+" and password="+@password";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先取出用户名=name 的记录
如果没找到记录 表示登录失败
如果找到了记录 那么比较密码字段与 password是否相符 不相符表示登录失败
如果没找到记录 表示登录失败
如果找到了记录 那么比较密码字段与 password是否相符 不相符表示登录失败
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
JAVA很容易啊。。用传参数得方式可以防止的
Statment stm = prepareStatement(sql);
stmt.setString(1, username);
stmt.setPassword(2, pwd);
....
参数化是最有效的防注入的方式了,干吗不用呢?
Statment stm = prepareStatement(sql);
stmt.setString(1, username);
stmt.setPassword(2, pwd);
....
参数化是最有效的防注入的方式了,干吗不用呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询