安全修复之Web——Referrer-Policy响应头缺失

3,176 阅读3分钟

Referrer介绍

Referrer网站来路;访问者进入网站任何途径。HTTP Referer是header的一部分,当浏览器向web服务器发出请求的时候,一般会带上Referer,告诉服务器用户从那个页面连接过来的,服务器藉此可以获得一些信息用语处理。

image.png

作用

判断网站来源,可以相应的做一些校验,比如只允许某网站的请求,那么就可以通过获取referer,加以判断即可.

Referrer-Policy

Referrer-Policy 首部用来监管哪些访问来源信息——会在 Referer 中发送——应该被包含在生成的请求当中。(通俗说就是Referrer-Policy的作用就是为了控制请求头中referrer的内容的展示)

背景

Web 服务器对于 HTTP 请求的响应头中缺少 Referrer-Policy,这将导致浏览器提供的安全特性失效。 当用户在浏览器上点击一个链接时,会产生一个 HTTP 请求,用于获取新的页面内容,而在该请求的报头中,会包含一个 Referrer,用以指定该请求是从哪个页面跳转页来的,常被用于分析用户来源等信息。但是也成为了一个不安全的因素,所以就有了 Referrer-Policy,用于过滤 Referrer 报头内容

安全隐患

Web 服务器对于 HTTP 请求的响应头中缺少 Referrer-Policy,这将导致浏览器提供的安全特性失效,意外暴露用户来源信息,更容易遭受 Web 前端黑客攻击的影响。

指令

其可选的项有: 
no-referrer 
no-referrer-when-downgrade 
origin 
origin-when-cross-origin 
same-origin strict-origin 
strict-origin-when-cross-origin 
unsafe-url
  • no-referrer

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

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

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

  • origin

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

  • origin-when-cross-origin

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

  • same-origin

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

  • strict-origin

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

  • strict-origin-when-cross-origin

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

  • unsafe-url

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

Referrer-Policy更改方法

1.  通过Referrer-Policy HTTP header设置:

Referrer-Policy: no-referrer 

2.  通过<meta>元素改变Referrer Policy,直接修改名为referrer的内容

<meta name="referrer" content="origin">

3.  给 <a><area><img><iframe>, 或者<link>元素设置referrerpolicy属性

<a href="http://example.com" referrerpolicy="origin">