CSRF中Referer的误解

来源:互联网 发布:2017年最流行的网络语 编辑:程序博客网 时间:2024/06/09 23:50
首先要知道,该字段主要是为了解决图片盗链问题。然后作为CSRF的一种监控手段,需要和其他结合。
看到网上有人说Refer可以伪造
1.利用服务端脚本代码,如PHP。这些是在服务器运行的,发包也是服务器发的,都获取不到受害者的cookie。
2.前端,ajax等。ajax好像确实有设置referer的函数,但是最终发包的构造是浏览器完成,也就是说浏览器会覆盖,就算你前端脚本构造了。
以后变大佬了,弄清楚更底层的东西就清晰了。


HTTPS跳转到HTTP可以支持传递Referer

我抓包看了





1.如果 referer-policy 的值为never:删除 http head 中的 referer;
2.如果 referer-policy 的值为default:如果当前页面使用的是 https 协议,而正要加载的资源使用的是普通的 http 协议,则将 http header 中的 referer 置为空;
3.如果 referer-policy 的值为 origin:只发送 origin 部分;
4.如果 referer-policy 的值为 always:不改变http header 中的 referer 的值,注意:这种情况下,如果当前页面使用了 https 协议,而要加载的资源使用的是 http 协议,加载资源的请求头中也会携带 referer。
参考 http://www.freebuf.com/news/57497.html


以下是知乎上的一位答主的说法
作者:林键 链接:https://www.zhihu.com/question/29523405/answer/88875530
在百度搜索,不管你的目标页面是HTTPS还是HTTP,你都可以获得百度的referer头。
百度搜索给出的结果,其实是一个百度的跳转链接。你点击这个百度的跳转链接后,跳转到目标网站。
1 在用户使用高级浏览器时,百度的跳转链接是HTTPS协议的。
类似:
https://www.baidu.com/link?url=m-pYzY9M2-58hTU9e9734i0xhCYlzHacrag2g7POWEK&wd=&eqid=fb671fd900149caa0000000456d6599b

因为百度的页面增加了
<meta content="always" name="referrer">

标记, 可以让高级浏览器,把HTTPS的referer带给HTTP的页面。
2 在旧的浏览器下,百度的跳转链接是HTTP协议的。
类似:
http://www.baidu.com/link?url=m-pYzY9M2-58hTU9e9734i0xhCYlzHacrag2g7POWEK&wd=&eqid=fb671fd900149caa0000000456d6599b

HTTP页面当然可以把 HTTP的referer带给下一个页面。
针对此现象我的理解是:百度首先保证referer能够传递给目标网站,然后尽可能使用HTTPS保护自己的内容。

原创粉丝点击