论坛风格切换
您好,欢迎光临本站!   登录 注册新用户
  • 2311阅读
  • 2回复

[asp]Cookies 欺骗漏洞的防范方法(vbs+js 实现) [复制链接]

上一主题 下一主题
 

发帖
16250
黑豆
-2
威望
45224
贡献值
2
交易币
0
红豆
0
只看楼主 倒序阅读 0 发表于: 2013-11-24
考虑到 ASP 开发可以采用 vbs 和 js 两种语言,这里同时提供两种语言的程序代码(双语版?YY中……)

最后罗嗦一句,本人录入这篇文章用的机器上没有 ASP 环境,所以提供的代码未能进行测试,对这一点本人深表歉意。如果大家发现了代码中的任何问题,欢迎拍砖~本人皮厚~
一、攻击原理
Cookies 欺骗主要利用当前网络上一些用户管理系统将用户登录信息储存在 Cookies 中这一不安全的做法进行攻击,其攻击方法相对于 SQL 注入漏洞等漏洞来说相对要“困难”一些,但还是很“傻瓜”。
我们知道,一般的基于 Cookies 的用户系统至少会在 Cookies 中储存两个变量:username 和 userlevel,其中 username 为用户名,而 userlevel 为用户的等级。当我们的浏览器访问 ASP 页面时,它会传出类似
GET /.../file.asp HTTP 1.0
...
Cookies: username=user&userlevel=1
...
的数据包,那么,我们只要知道了管理员的 username 和 userlevel 值(假设分别为 admin 和 5),便可以通过传输
GET /.../file.asp HTTP 1.0
...
Cookies: username=admin&userlevel=5
...
来获取管理员权限。很简单是不是?然而,在这个漏洞被发现之前,几乎所有的用户管理系统都依赖于 Cookies。
二、安全地储存用户信息
既然 Cookies 是不安全的,而我们又必须把用户登录信息存储下来,那么应该存储在什么地方呢?
我们注意到,在 ASP 中,除了 Cookies 外,还有 Session 可以储存信息。Session 是储存在服务器上的,不是客户端随随便便就能够更改的,所以具有极高的安全性。这样,大家就可以把所有 Cookies 的代码均换作 Session 了。
三、长时间储存用户信息
采用 Session 来保存用户登录信息,虽然摆脱了 Cookies 欺骗的问题,但是 Session 不能长期储存(IIS 默认 Session 在用户停止响应 20 分钟后失效),于是产生了这一节所述的 Cookies + Session 混合存储法。
这一方法有两个变种,第一种是在 Cookies 中储存用户名和密码,当用户访问一个页面时,先读取 Session,如果有内容则以 Session 为准,否则读取 Cookies,按照 Cookies 中提供的用户名和密码进行“不透明”的登录一次,用以判断 Cookies 中的内容是否合法,若合法再进而存入 Session 中。实现这一方法的代码如下:

发帖
16250
黑豆
-2
威望
45224
贡献值
2
交易币
0
红豆
0
只看该作者 2 发表于: 2013-11-24
vbs:
复制代码 代码如下:

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

js:
复制代码 代码如下:

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

然后,在上面提供的验证代码中把对 Cookies("password") 的验证改为对 Cookies("verifycode") 的验证即可。
四、结论
通过我们的分析以及处理,Cookies 欺骗漏洞已经被完全解决,从此,我们的 ASP 程序变得更加安全了。
快速回复
限100 字节
 
上一个 下一个