zoukankan      html  css  js  c++  java
  • http 策略之 ReferrerPolicy

    一、背景

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

    二、配置方式

    1 、HTML 配置

    既然是客户端策略,那么在HTML中的配置想必大家应该都清楚:

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

    或者用 <a>、<area>、<img>、<iframe>、<script> 或者 <link> 元素上的 referrerpolicy 属性为其设置独立的请求策略。

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

    另外也可以在<a>、<area> 或者<link> 元素上将 rel属性设置为 noreferrer。

    <a href="http://example.com" rel="noreferrer">

    2、CSP响应头设置

    CSP(Content Security Policy)

    Content-Security-Policy:
    
    referrer no-referrer|no-referrer-when-downgrade|origin|origin-when-cross-origin|unsafe-url;

    三、API

    Referrer-Policy: no-referrer
    
    Referrer-Policy: no-referrer-when-downgrade
    
    Referrer-Policy: origin
    
    Referrer-Policy: origin-when-cross-origin
    
    Referrer-Policy: same-origin
    
    Referrer-Policy: strict-origin
    
    Referrer-Policy: strict-origin-when-cross-origin
    
    Referrer-Policy: 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(移除参数信息之后)作为引用地址。(最不安全的策略了)

    四、推荐

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

    9ca74a116dbc68018fb18f75c2fe2141.png

  • 相关阅读:
    Java 基础
    Java 数据类型
    Spring 拦截器实现事物
    SSH 配置日记
    Hibernate 知识提高
    Jsp、Servlet
    leetcode 97. Interleaving String
    leetcode 750. Number Of Corner Rectangles
    leetcode 748. Shortest Completing Word
    leetcode 746. Min Cost Climbing Stairs
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15847688.html
Copyright © 2011-2022 走看看