• 前端安全配置之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()方法

    例子:<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline' my.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' my.com">

    参考:https://www.cnblogs.com/heyuqing/p/6215761.html

       https://www.cnblogs.com/alisecurity/p/5924023.html

  • 相关阅读:
    Ubuntu 17.10 联网、jdk配置、初始化
    记一次与为知笔记的客服沟通
    C++ Primer zh 5th 思维导图
    《程序员健康指南(The Healthy Programmer)》笔记
    Learn_OpenGL_002_你好,长方形
    Learn_OpenGL_001_环境配置
    Visual Studio Community 2017 配置 OpenGL 环境
    oracle删除数据库
    oracle修改审计功能
    dataguard日志自动删除
  • 原文地址:https://www.cnblogs.com/zhangzhijian/p/10579974.html
Copyright © 2020-2023  润新知