Cookies 欺骗漏洞的防范方法(vbs+js 实现)(2)


rs.Open "SELECT TOP 1 * FROM [user] WHERE username='" & username & "' AND password='" & password & "'", conn, 1, 3
if rs.eof then
' Cookies 中的信息非法
...
else
' Cookies 中的信息合法,自动登录
Session("username") = username
...
end if
end if
else
' 用户信息已经存在于 Session 中,直接读取
...
end if
%>

js:
复制代码 代码如下:

<%
var username, password;
username = Session("username") + "";
if (username == "" || username == "undefined") {
// Session 中没有用户信息
username = Request.Cookies("username") + "";
password = Request.Cookies("password") + "";
// 注意上面的两句得到的 username 和 password 要进行 SQL 注入漏洞的防范(即过滤掉单引号“'”),这里略去
if (username == "" || username == "undefined" || password == "" || password == "undefined") {
// 用户没有登录
...
}
else {
// 这里假设已经创建了 conn 和 rs 对象
rs.Open("SELECT TOP 1 * FROM [user] WHERE username='" + username + "' AND password='" + password + "'", conn, 1, 3);
if (rs.eof) {
// Cookies 中的信息非法
...
}
else {
// Cookies 中的信息合法,自动登录
Session("username") = username + "";
...
}
}
}
else {
// 用户信息已经存在于 Session 中,直接读取
...
}
%>

但是这种方法对于用户来说又不太安全,原因是浏览器每次访问页面时都会把 Cookies 传输过去,而包含密码的 Cookies 一旦被他人获取将导致用户帐号被盗。对于这种情况,又出现了第二种方法,即在用户信息数据库中增加一个字段“verifycode”,在用户登录时,随机产生一个长整型校验值存入 verifycode 字段,并且将 username 和这个 verifycode 值而不是 password 存入 Cookies。而在验证 Cookies 中的用户信息时,也只验证 username 和 verifycode。这种方法的好处在于,即使用户的 Cookies 被黑客获取,他也只能利用这个“临时”产生的 verifycode 登录,而无法获得用户的密码。只要此用户再一次使用用户名和密码登录,这个 verifycode 值便会改变,黑客便无法通过原来的 verifycode 登入。
这种方法的实现只需要在上述方法一的代码上稍加改动。首先,在您的登录程序中,在验证通过存储用户信息的地方需要加上一段:
vbs:
复制代码 代码如下:

<%
Response.Cookies("verifycode") = int(rnd * 2100000000)
%>

js:
复制代码 代码如下:

<%
Response.Cookies("verifycode") = Math.floor(Math.random() * 2100000000);
%>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2276.html