Discuz教程网

用js对抗referer来路伪造

[复制链接]
authicon dly 发表于 2012-2-15 23:07:11 | 显示全部楼层 |阅读模式
众所周知,服务器端的referer来路是可以伪造的,无论是ASP、PHP还是其他脚本都是可以伪造referer的,一些下载软件更是把referer伪造的惟妙惟肖,利用webbrowser控件可以方便的伪造来路。那么,作为保护网站的守门人,我们又应该如何防止这些伪造的referer呢?

这里,飘易要隆重地推出 Javascript 这一利器。

上面,飘易提到的伪造referer的方法都是通过服务器端的脚本来实现的,但它们并不能欺骗客户端。而JS是在客户端执行的,它并不会理会服务器端的headers信息,所以,利用js的 document.referer 方法可以准确地判断网页的真实来路。

几乎所有的第三方统计不约而同地采用了 document.referer 来判断来路,为什么?正是基于 js 下的 referer来路 是不可伪造的。即使在服务器端成功地伪造了referer的网页脚本,在第三方统计里也是无法被统计到的,原因正是由于这些三方统计采用了 document.referer 来判别真实的来路。

所以,为了对抗虚假的 referer 伪造信息,我们只需要利用 js 的 document.referer 来判别,就可以将伪造的信息拒之门外,从而更好的保护站内资源。

据飘易所知,目前为止,js下是无法伪造 referer 的。

PS(2010-1-9): 命题错误。此话题不再深入讨论。任何客户端的东西均不可太信任,只做辅助判断即可。下面的内容大家可以忽略。只要是客户端的来路,我可以伪造任意来路,道高一尺魔高一丈。

那么有人问了,如果客户端把JAVASCRIPT脚步甚至cookies关闭了,你还怎么判断这个referer?其实答案也很简单,就是 js 和 asp/php 脚本之间通过 操作cookies 这个中间桥梁来实现,js里把这个referer写入cookies,asp/php读取这个cookies,如果读取不到这个cookies,则判断非本站来路。

PS(2009-11-6): 有网友Axpwx在评论里说,此法不可行。飘易思考了下,Axpwx说的有道理,cookies是客户端的东东,本身也是可以伪造的,所以在后台判断这个cookies也是不安全的。但稍微转换一下思路就可以了,我们可以利用js通过AJAX的方法操作session来实现同样的判断。



上一篇:js模拟点击那点事
下一篇:WinHttp.WinHttpRequest.5.1—用于新浪微博自动添加好友
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 10:57

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表