知识专栏
多方位、多角度、深度解读您所关心的问题

Referer是用来防止 CORS(跨站请求伪造)的一种最常见及有效的方式。对于自身服务器,通过客户端发来的请求中带有的referer信息,可以判断该请求是否来源于本网站。这样就可以一定程度上避免其他网站盗取自身服务器信息,或者可以通过referer来实现广告流量引流,说白了,referer是一种客户端带到服务器的客户端信息,而Referrer-Policy则是客户端对这个带信息策略的配置。

案例解释:

当用户在浏览器上点击一个链接时,会产生一个 HTTP 请求,用于获取新的页面内容,而在该请求的报头中,会包含一个 Referrer,用以指定该请求是从哪个页面跳转页来的,常被用于分析用户来源等信息。但是也有成为用户的一个不安全因素,比如有些网站直接将 sessionid 或是 token 放在地址栏里传递的,会原样不动地当作 Referrer 报头的内容传递给第三方网站。

所以就有了 Referrer Policy,用于过滤 Referrer 报头内容。

Referrer-Policy的指令值介绍:

(1)no-referrer

整个 Referer 首部会被移除。访问来源信息不随着请求一起发送。

(2)no-referrer-when-downgrade(默认值)

在没有指定任何策略的情况下用户代理的默认行为。在同等安全级别的情况下,引用页面的地址会被发送(HTTPS->HTTPS),但是在降级的情况下不会被发送 (HTTPS->HTTP)。

(3)origin

在任何情况下,仅发送文件的源作为引用地址。例如 https://example.com/page.html 会将 https://example.com/ 作为引用地址。

(4)origin-when-cross-origin

对于同源的请求,会发送完整的URL作为引用地址,但是对于非同源请求仅发送文件的源。

(5)same-origin

对于同源的请求会发送引用地址,但是对于非同源请求则不发送引用地址信息。

(6)strict-origin

在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS),但是在降级的情况下不会发送 (HTTPS->HTTP)。

(7)strict-origin-when-cross-origin

对于同源的请求,会发送完整的URL作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS);在降级的情况下不发送此首部 (HTTPS->HTTP)。

(8)unsafe-url

无论是同源请求还是非同源请求,都发送完整的 URL(移除参数信息之后)作为引用地址。此为最不安全的策略了。

推荐使用strict-origin-when-cross-origin 作为默认的referer策略。这是适配同源模式下,防止CSRF攻击的最佳实践。

猜您还想看: 跨站漏洞 跨站攻击
赞一下
--
踩一脚
--

您已成功复制微信号

leishi010

打开微信添加好友?

确定