• Content Security Policy减少劫持


    Content Security Policy减少劫持

    什么是CSP?

    CSP是由单词 Content Security Policy 的首单词组成,是HTML5带给我们的一套全新主动防御的体系,旨在减少(注意这里是减少而不是消灭)跨站脚本攻击。
    CSP是一种由开发者定义的安全性政策性申明,通过CSP所约束的的规责指定可信的内容来源(这里的内容可以指脚本、图片、iframe、fton、style等等可能的远程的资源)。通过CSP协定,让WEB处于一个安全的运行环境中。

    白名单

    CSP定义了 Content-Security-Policy HTTP头来为你的内容创建一个来源的白名单。浏览器只允许白名单域里的资源和代码执行。这样就算攻击者找到了一个漏洞注入脚本,脚本不在白名单里面照样无法执行。
    举例说明:
    我们信任m.58.com的代码,我们可以这样定义我们的协议
    Content-Security-Policy: script-src 'self' http://m.58.com
    script-src控制script标签相关的策略,我们指定了'self'和http://m.58.com作为他的值,浏览器只会下载并执行本域和http://m.58.com的脚本。
    更多指令介绍:

    • connect-src
      限制使用XHR,WebSockets,和EventSource的连接源。

    • font-src
      指定字体的下载源。

    • frame-src
      指定frame可以嵌入的连接源。

    • img-src
      指定图片的加载源。

    • media-src
      指定video和audio的数据源。

    • object-src
      指定Flash和其他插件的连接源。

    • style-src
      指定link的连接源。和script-src类似。

    默认如果你不指定这些指令的值,将允许所有的来源,例如 font-src:*和不写font-src是等价的。
    当然你也可以重写默认值,只要使用default-src就可以。比如:指定了default-src:https://example.com 但是没有指定font-src,那么你的font-src也只能从https://example.com加载。在之前的例子中我们只指定了script-src,这说明我们可以从任何其他的地方加载image,font和其他资源。
    你可以为你的web应用指定多个或者一个指令,只需要在HTTP头里面列出来这些值,不同的值之间用“;”来分隔。但是如果你写成 script-src https://host1.com;script-src:https://host2.com,那么第二个script-src将不起作用,正确的写法是:script-src https://host1.com https://host2.com 。
    再举一个例子:如果你的静态资源全都来自一个CDN,并且你知道不会有frame和其他插件。你可以这样写
    Content-Security-Policy:default-src https://cdn.example.net;frame-src 'none';object-src:'none'
    关键词:

    • 'none'
      什么都不匹配。

    • 'self'
      匹配当前的域,不包括子域。

    • 'unsafe-inline'
      允许inline JavaScript 和 CSS。

    • 'unsafe-eval'
      允许 eval,new Function等的执行。

    这几个关键词需要用单引号引用起来,如果不引用,则会被认为是域名。

    详细内容参考:http://content-security-policy.com/

    使用示例

    使用CSP时,Web应用可以通过提供一个Content-Security-Policy HTTP头或一个META的HTML元素.不过这样的政策只在当前文档适用而已。
    META使用示例:

    
    <meta http-equiv="Content-Security-Policy" content="default-src *.tanx.com *.mmstat.com *.meituan.com https://i.meituan.com/ https://ms0.meituan.com https://mc0.meituan.com 192.168.4.223:9999 *.maoyan.com  *.meituan.net www.google-analytics.com wvjbscheme://* imeituan://* *.dianping.com *.dpfile.com 'self' 'unsafe-inline' 'unsafe-eval' blob: data:;">

    chrome里查看页面用到哪些域名:

    domain

    浏览器兼容性

    CSP 目前有两版:CSP1和CSP2(有些指令是属于CSP2,比如:child-src、form-action等,详见http://content-security-policy.com/)

    两版的支持状态可以在http://caniuse.com/#search=csp
    中查到。

    参考资料:

    http://www.zhihu.com/question/21979782
    http://www.2cto.com/Article/201408/327064.html
    https://imququ.com/post/content-security-policy-reference.html
    https://segmentfault.com/a/1190000003852910
    http://content-security-policy.com/

  • 相关阅读:
    Appium学习笔记||十一、Appium按键操作
    Appium学习笔记||九、操作不可见元素
    Appium学习笔记||八、滑动页面
    Appium学习笔记||七、用UIAutomator API定位
    Appium学习笔记||六、根据Xpath寻找元素
    Appium学习笔记||五、Tap方法
    enumerate 函数
    python 复制 浅copy 深copy 的区别
    听歌都能听出来代码...
    for 循环时候 pop现象
  • 原文地址:https://www.cnblogs.com/10manongit/p/12944589.html
Copyright © 2020-2023  润新知