asp安全 Cookies 欺骗漏洞的防范(2)

作者:愿望 来源:编程中国 时间:2007-11-02 12:23:00 

三、长时间储存用户信息

采用 Session 来保存用户登录信息,虽然摆脱了 Cookies 欺骗的问题,但是 Session 不能长期储存(IIS 默认 Session 在用户停止响应 20 分钟后失效),于是产生了这一节所述的 Cookies + session 混合存储法。

这一方法有两个变种,第一种是在 Cookies 中储存用户名和密码,当用户访问一个页面时,先读取 Session,如果有内容则以 Session 为准,否则读取 Cookies,按照 Cookies 中提供的用户名和密码进行“不透明”的登录一次,用以判断 Cookies 中的内容是否合法,若合法再进而存入 session 中。实现这一方法的代码如下:

VBs:

<%
Dim username, password
username = session("username")
if username = "" then
' session 中没有用户登录信息
  username = Request.Cookies("username")
  password = Request.Cookies("password")
  ' 注意上面的两句得到的 username 和 password 要进行 SQL 注入漏洞的防范(即过滤掉单引号“'”),这里略去
  if username = "" or password = "" then
  ' 用户没有登录
    ...
  else
    ' 这里假设已经创建了 conn 和 rs 对象
    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);
%>

然后,在上面提供的验证代码中把对 Cookies("password") 的验证改为对 Cookies("verifycode") 的验证即可。

四、结论

通过我们的分析以及处理,Cookies 欺骗漏洞已经被完全解决,从此,我们的 ASP 程序变得更加安全了。

标签:Cookies,漏洞
0
投稿

猜你喜欢

  • 安全防范 对于Ddos攻击的分析及对策

    2009-09-23 20:04:00
  • linux cgroups详细介绍

    2023-08-31 16:32:54
  • vmware 装机报错VMware Workstation 未能启动 VMware Authorization Service

    2021-01-25 02:18:13
  • Discuz! X2子目录伪静态的实现方法

    2011-09-21 12:47:37
  • 保护(IIS)web服务器的15个技巧

    2008-04-18 16:01:00
  • 网站友情链接的SEO基本技巧

    2008-07-23 13:04:00
  • GoDaddy:如何访问File Manager

    2010-05-01 12:58:00
  • 网站粘度从哪些方面考虑

    2007-09-19 13:15:00
  • SEO优化手册之三 进行网站的规范化设计

    2009-02-27 18:48:00
  • 分析Google搜索结果页变化 窥见优化方向

    2009-09-15 09:12:00
  • 关于linux分区,文件系统,目录结构的概述

    2022-06-19 09:38:31
  • GoDaddy:怎样把iTunes RSS 重新定位到另一位置 Godaddy

    2010-04-13 12:40:00
  • 网页恶意代码对IE浏览器的危害及解决方法

    2007-08-06 17:41:00
  • 系统技巧:给Windows目录加口令的特殊方法

    2007-05-15 15:37:00
  • SNS盛宴开席 人人网千金买马

    2009-11-22 09:38:00
  • 令Apache中沉睡的无用进程自动退出的方法

    2023-08-18 05:37:39
  • windows 2003 server需要停止的服务

    2009-10-18 07:44:00
  • 动网商业大亨登陆香港 发布会美女云集

    2009-10-31 13:06:00
  • docker容器调用yum报错的解决办法

    2021-01-09 23:32:12
  • 简单介绍一下今天流行的五个网站推广方法

    2009-05-15 11:15:00
  • asp之家 网站运营 m.aspxhome.com