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 程序变得更加安全了。
猜你喜欢
- ##域名与网关项(Domain/Gateway).. Domain Name:为局域网的域名,在此为Company.mail,若无独立域名可
- 小编日前发现,美国搜索巨头Google开始实施“更有进攻性”的搜索广告策略,具体是在搜索结果的顶部显示关键词广告,将广告和搜索结果“在视觉上
- IResearch艾瑞咨询根据Service Excellence Research Group发布的2008年美国在线厂商对网站各项功能的
- 网页抓取优先策略也称为“页面选择问题”(page Selection),通常是尽可能地首先抓取重要性的网页,这样保证在有限的资源内尽可能地照
- 关键词堆砌:众多关键字充斥于网页信息中就会形成关键字堆砌(Keyword stuffing)。这类网页看起来更像是一连串的关键字,而不像是别
- 做站半年多了,因为我当时做站的目的就是帮助想创业的人,因此我把我这一段时间的过程和经验同大家分享。2006年我就知道做网站很有前途,但一直到
- Godaddy主机用户如何在File Manager里的多个项目上执行某个操作,下面我来教给大家:首先、登陆你的Account Manage
- 3、化解无法弹出登录窗口的麻烦如果要想访问服务器中的某个共享信息时,我们往往需要先打开网上邻居窗口,然后双击其中的服务器所在计算机图标,在弹
- 去年9月以来各浏览器市场份额变化情况(腾讯科技配图)腾讯科技讯(中涛)北京时间8月2日消息,据国外媒体报道,美国互联网流量监测机构Net A
- 速度|显示|页面  
- 从刚开始做站开始自己就有一个目标,那就是绝对不能做垃圾站,但是回首一个月以来做站的历程,发现自己的网站确实已经变得垃圾起来,没有任何的新意,
- SEO一般分成两部分,一个部分是内部优化,第二部分就是外部链接,内部优化更多的是解决收录问题,而直接影响到关键字排名的更多的是链接问题!一个
- 做网站最需要的是什么?两个字——坚持!做网站之前你肯定就有一个预期,但实际往往不如预期,可能只是一半,甚至更少。一般网站三个月后才会有上千的
- 网页上通常会有数以百计的词语,那么搜索引擎怎样去分辨哪些是描述你的网站的重要的词语呢?搜索引擎会统计你一个页面的字数。那些重复出现的词或短语
- Godaddy用户如何使用File Manager删除一个目录呢?整理了详细的教程供您参考。1、 登陆你的Account Manager.
- 这个方法要文档只有一个关键词才会生效 {dede:field name='ID' runphp
- 亲爱的,今天是我们两个认识1周年的日子,除了送你一个新的512M的内存当礼物外,我还想对你说几句知心话。 我知道你很漂亮,在同龄的女孩子里都
- 一般来说,dmoz收录网站没有绝对地标准,但是遵循一些标准,会提高收录机会的。1、内容要原创,抄袭的内容会被认为没有价值而被拒绝;2、网站空
- 一、搜索引擎的搜索过程1、抓取网页:每个独立的搜索引擎都有自己的网页抓取程序(spider,即通常所说的“蜘蛛”程序)。Spider顺着网页
- 微软发布了 Visual Studio 2010 和 .NET Framework 4.0 的Beta 2测试版,微软往Framework