探索设计与体验的融合
Fusion design exploration and experience
新塘新闻动态
News
好的新塘网络营销公司会给客户提出建设性的意见,善于对客户进行良性引导
您的位置:>> 新塘网站首页 >> 技术文章
新塘论坛防止cookies欺骗的方法

在论坛里保存用户登陆信息的一般可以用session和cookies。session是保存在服务器端的,应该不会被人利用;而cookies是保存在客户端的,有被篡改的可能。 

在网上有很多介绍cookies欺骗的方法,而我也找到了可以修改cookies信息的软件(iecv容笑精简汉化版)。这实在是一件危险的事情。    

试想一下,在一个没有采取任何措施防止cookies欺骗的论坛上,我先注册一个用户并登陆,然后用这个软件把cookies中的用户名改成管理员的用户名,那么我就可以开始在这个论坛捣乱了。    

考虑了几天之后,查看了一下动网论坛和PHPWIND的文件,还是没有搞清楚这两个论坛是怎样防止cookies欺骗的。最后决定还是用我自己的办法。    

总体的思路就是利用随机数防止cookies欺骗。 ASP可以用: randomize dim randnum randnum=clng(rnd*99999999) PHP可以用: $randnum=rand(1,99999999); 99999999应该足够了,不需要设的更大了,当然还可以用md5加密一下,更保险。    

第一步:在数据库的用户表中添加一个randnum字段,文本,50个字符就足够了。

第二步:修改注册页面程序,在把用户资料添加到数据库的时候,把产生的随机数也写入数据库的randnum。其实这也算是用户名之外的一个标识。    

第三步:修改登陆页面,在用户名和密码通过验证之后,取出对应这个用户名的randnum,并写入cookies。也就是说,产生了两个cookies,一个是用户名username,一个随机数randnum。注意这两个cookies应该同步产生,以免造成失效时间不统一。    

第四步:有了randnum这个cookies,我们就可以防止cookies欺骗了。在程序中需要用户cookies的地方加上验证,或者在所有页面加上验证也可以。

具体方法是:取出数据库中用户名符合用户名cookies并且randnum符合随机数cookies的记录, ASP可以用:

select * from user where username='"&request.cookies("username")&"' and randnum='"&request.cookies("randnum")&"'

PHP可以用:

select * from user where username='$_cookie[username]' and randnum='$_cookie[randnum]' 如果结果为空的话,就清空所有的cookies。    

到这里,防止cookies欺骗就全部完成了。熟悉程序和数据库的朋友应该可以看的出来,上面的思路就是用户在登陆的时候需要验证两个cookies,一个是用户名,一个是随机数,用户名可以很轻松的修改,但是随机数就很难猜到了。即使你把用户名修改成管理员的用户名,但是因为随机数不符合,也会清空cookies而无法登陆。

创意设计工作室愿大家建立更安全的网站

相关链接>>
您对此文有什么评论?
类型: 意见建议 内容报错
网友对此文的评论:
访客:把你两个cookie都复制过来
回复:可与本站技术联系