这样的代码有没有安全性问题?

代码如下:

 1   
 2on error resume next   
 3dim rs   
 4UserName1=request.form("UserName")   
 5PassWd1=request.form("PassWd")   
 6  
 7set rs=server.CreateObject("ADODB.RecordSet")   
 8rs.open "select * from admin where UserName='" & UserName1 & "'",conn,1   
 9if passwd1<>rs("passwd") then   
10response.write "

<link href="style.css" rel="stylesheet" type="text/css"/>

1"   
2response.write "

<body>"
response.write "<p> </p><p> </p><p> </p><table align="center" bgcolor="#000000" border="0" cellpadding="0" cellspacing="1" width="253"><tr><td align="center" bgcolor="#FFFFFF"><p> </p><p>请输入正确的管理员名字和密码</p><p> </p></td></tr></table>"
else
session("UserName")=RS("Username")
session("KEY")=rs("OSKEY")
response.redirect "main.asp"
end if
rs.close

 1其中,OSKEY有两个值,一个是SUPER,一个是USER,我想知道,作为一个USER进入后,有没有可能改变身份成为SUPPER?   
 2\---------------------------------------------------------------   
 3  
 4不够安全,应当对输入的username和passwd进行非法字符的判断与转换,再进行操作,否则有可能出现系统遭到欺骗的情况。   
 5\---------------------------------------------------------------   
 6  
 7' or '1'='1   
 8\---------------------------------------------------------------   
 9  
10ASP通过Session对象生成特定的用户ID,但是在服务器端并不保存以前任何的请求信息。ASP是通过HTTP Cookie来指派用户ID,因此Session对象是在客户端的,因此如果浏览器不支持Cookie,那么就不能使用会话功能。   
11\---------------------------------------------------------------   
12  
13密码应该在服务器段加密后作为SQL语句提交给数据库,判断是否有匹配的记录,用读出密码的方式不安全   
14\---------------------------------------------------------------   
15  
16第一句就很不安全<!--#include file=conn.inc-->千万不要用 .inc扩展名,一定要改为.asp   
17\---------------------------------------------------------------   
18  
19rs.close应该在redirect前进行关闭,而且objconn也要关闭(数据库连接)   
20  
21\---------------------------------------------------------------   
22  
23Session的安全性你不用操心,操心了也没有用。   
24  
25Session是保存在服务器端的内存里面的,物理上是安全的。   
26  
27最后的那个问题:“别人通过打开IE能不能绕过检查直接进入了”,当然可以。   
28  
29解决办法:改变你的验证规则,不要通过用户名验证。增加一个 IsUserAuthentical 字段在Session的集合里面,如果登陆时发现用户是合法的,设他为真。以后用户试图访问资源的时候,检验这个字段。   
30利用这个字段做一个Logout,logout可以显式的被用户调用,logout执行的操作中包括设定上述字段为假。   
31  
32明白了?   
33  
34\---------------------------------------------------------------   
35  
36验证是为了保持状态,保持状态基本上有种方式:   
371、cookie   
382、session   
393、url重写   
40基本上,cookie是不被采纳   
41session需要服务器大量的资源,而url重写也需要一定消耗,但是资源占用可以认为比较少,在安全性不是非常要求时可以考虑。   
42  
43\---------------------------------------------------------------   
44  
45也许我没有讲清楚,因为我们每次向同一网站发出请求时,服务器并不会每次都为我们建立新的会话对象,所以我认为在浏览器端必定存在会话对象以供服务器每次识别不同的SessionID,但实际上Session对象是在服务器生成的,而且在站点浏览器中存储的是Cookie形式的SessionID。   
46Session的原理你可以参考一下IIS在本机上的的说明。http://localhost/-&gt;sessionid-&gt;管理会话,可能会对你有帮助。</body>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus