zoukankan      html  css  js  c++  java
  • 前端安全配置之Content-Security-Policy(csp)

    什么是CSP

    CSP全称Content Security Policy ,可以直接翻译为内容安全策略,说白了,就是为了页面内容安全而制定的一系列防护策略. 通过CSP所约束的的规责指定可信的内容来源(这里的内容可以指脚本、图片、iframe、fton、style等等可能的远程的资源)。通过CSP协定,让WEB处于一个安全的运行环境中。

    有什么用?

    我们知道前端有个很著名的”同源策略”,简而言之,就是说一个页面的资源只能从与之同源的服务器获取,而不允许跨域获取.这样可以避免页面被注入恶意代码,影响安全.但是这个策略是个双刃剑,挡住恶意代码的同时也限制了前端的灵活性,那有没有一种方法既可以让我们可以跨域获取资源,又能防止恶意代码呢?

    答案是当然有了,这就是csp,通过csp我们可以制定一系列的策略,从而只允许我们页面向我们允许的域名发起跨域请求,而不符合我们策略的恶意攻击则被挡在门外.从而实现

    需要说明的一点是,目前主流的浏览器都已支持csp.所以我们可以放心大胆的用了.

    指令说明

    指令就是csp中用来定义策略的基本单位,我们可以使用单个或者多个指令来组合作用,功能防护我们的网站.

    以下是常用的指令说明:

    指令名

    demo

    说明

    default-src

    'self' cdn.example.com

    默认策略,可以应用于js文件/图片/css/ajax请求等所有访问

    script-src

    'self' js.example.com

    定义js文件的过滤策略

    style-src

    'self' css.example.com

    定义css文件的过滤策略

    img-src

    'self' img.example.com

    定义图片文件的过滤策略

    connect-src

    'self'

    定义请求连接文件的过滤策略

    font-src

    font.example.com

    定义字体文件的过滤策略

    object-src

    'self'

    定义页面插件的过滤策略,如 <object>, <embed> 或者<applet>等元素

    media-src

    media.example.com

    定义媒体的过滤策略,如 HTML6的 <audio>, <video>等元素

    frame-src

    'self'

    定义加载子frmae的策略

    sandbox

    allow-forms allow-scripts

    沙盒模式,会阻止页面弹窗/js执行等,你可以通过添加allow-forms allow-same-origin allow-scripts allow-popups, allow-modals, allow-orientation-lock, allow-pointer-lock, allow-presentation, allow-popups-to-escape-sandbox, and allow-top-navigation 策略来放开相应的操作

    report-uri

    /some-report-uri

     

    指令值

    所有以-src结尾的指令都可以用一下的值来定义过滤规则,多个规则之间可以用空格来隔开

    demo

    说明

    *

    img-src *

    允许任意地址的url,但是不包括 blob: filesystem: schemes.

    'none'

    object-src 'none'

    所有地址的咨询都不允许加载

    'self'

    script-src 'self'

    同源策略,即允许同域名同端口下,同协议下的请求

    data:

    img-src 'self' data:

    允许通过data来请求咨询 (比如用Base64 编码过的图片).

    domain.example.com

    img-src domain.example.com

    允许特性的域名请求资源

    *.example.com

    img-src *.example.com

    允许从 example.com下的任意子域名加载资源

    https://cdn.com

    img-src https://cdn.com

    仅仅允许通过https协议来从指定域名下加载资源

    https:

    img-src https:

    只允许通过https协议加载资源

    'unsafe-inline'

    script-src 'unsafe-inline'

    允许行内代码执行

    'unsafe-eval'

    script-src 'unsafe-eval'

    允许不安全的动态代码执行,比如 JavaScript的 eval()方法

    示例

    default-src 'self';   

    只允许同源下的资源

    script-src 'self';     

    只允许同源下的js

    script-src 'self' www.google-analytics.com ajax.googleapis.com;

    允许同源以及两个地址下的js加载

    default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';

    多个资源时,后面的会覆盖前面的

    服务器端配置

    • Apache服务

    在VirtualHost的httpd.conf文件或者.htaccess文件中加入以下代码

    Header set Content-Security-Policy "default-src 'self';"

    • Nginx

    在 server {}对象块中添加如下代码

    add_header Content-Security-Policy "default-src 'self';";

    • IIS 

    web.config:中添加

    <system.webServer>

      <httpProtocol>

        <customHeaders>

          <add name="Content-Security-Policy" value="default-src 'self';" />

        </customHeaders>

      </httpProtocol>

    </system.webServer>

    参考链接:

    https://www.zhihu.com/question/21979782

    https://content-security-policy.com/

  • 相关阅读:
    SQLMAP注入教程-11种常见SQLMAP使用方法详解
    VS2012/2013/2015/Visual Studio 2017 关闭单击文件进行预览的功能
    解决 IIS 反向代理ARR URLREWRITE 设置后,不能跨域跳转 return Redirect 问题
    Spring Data JPA one to one 共享主键关联
    JHipster 问题集中
    Spring Data JPA 定义超类
    Spring Data JPA查询关联数据
    maven命名
    maven仓库
    Jackson读取列表
  • 原文地址:https://www.cnblogs.com/heyuqing/p/6215761.html
Copyright © 2011-2022 走看看