如何实施内容安全策略?

时间:2015-02-25 09:59:06

标签: php security content-security-policy

有一篇很好的文章解释了像这样的CSP选项: http://www.html5rocks.com/en/tutorials/security/content-security-policy/

也许这完全是显而易见的,因为我找不到任何好的例子,但你如何在实践中实际实施CSP?

在PHP中,您可以在所服务的页面上设置标题,但如果您只有HTML文件,该怎么办?你必须通过你的网络服务器,apache或类似的方式吗?这似乎不是一个简单的方法。

这里最好的做法是什么?服务的每个页面都应该手动设置标题?

谢谢!

3 个答案:

答案 0 :(得分:2)

在一天结束时,选择权归你所有。 您可以在apache webserver中全局设置它。在这种情况下,它将适用于每个页面。 然后,如果需要更精细的方法,您还可以在各个页面上设置标题。

检查这些网站以获取有关构建CSP规则的帮助:

https://csp-evaluator.withgoogle.com/

https://report-uri.io/home/generate

Scott Helme对这个问题了解很多,并且也有一些很好的例子。 您也可以将报告发送到他的网站进行基本分析。

https://scotthelme.co.uk/content-security-policy-an-introduction/

这也可能对apache配置感兴趣

Generate a nonce with Apache 2.4 (for a Content Security Policy header)

我还强烈建议您阅读本文,其中讨论了一些较新(且更简单的)配置方法和浏览器向后兼容性

https://www.websec.be/blog/cspstrictdynamic/

这也是一篇优秀的论文" CSP Is Dead,万岁CSP!"来自谷歌研究,特别是通过绕过白名单和宣传信任,参考第4.节“推动CSP”。

https://research.google.com/pubs/pub45542.html

进行大量阅读并准备好实施时,请使用REPORT ONLY模式指令,以便在没有策略实施的情况下获取控制台消息。

Content-Security-Policy-Report-Only: <policy-directive>; <policy-directive>

一旦你开心,那么你可以执行规则:

Content-Security-Policy: <policy-directive>; <policy-directive>

答案 1 :(得分:1)

  

这似乎不是一个简单的方法。

是的,它没有。但是,你可以采取一些聪明的捷径。

  

你如何在实践中实际实施CSP?

     

在PHP中,您可以在所服务的页面上设置标题,但如果您只有HTML文件,该怎么办?你必须通过你的网络服务器,apache或类似的方式吗?这似乎不是一个简单的方法。

我编写了一个命令行PHP脚本,它采用了类似代码块的JSON blob。组装了一个类似于代码块B的字符串,并将其保存到单独的文件中。

A:

{
    "script-src": [ "self",  "https://apis.google.com" ]
}

B:

add_header Content-Security-Policy "script-src: 'self' https://apis.google.com";

然后我添加了一行来为该虚拟主机配置我的nginx配置,以包含生成的CSP指令:

include /path/to/script/output.conf;

作为该系统的结果,如果我想对CSP标题进行更改,我只需要编辑JSON文件。

这就是我如何使CSP标头易于管理。您的里程可能会有所不同。

这是:CSP Builder

答案 2 :(得分:0)

如果您正在运行Apache,则可以使用.htaccess执行此操作

将一个名为.htaccess的文件放在项目路径中(通常是这样的) / var / www / myProject如果由于其他原因而不存在。在这种情况下,只需添加以下标题规则:

browser.selectorExecute(".submit_jump_patch", function (submitDiv) {
            submitDiv[0].mousedown();
        });

现在,现代浏览器只会从您的域或google-apis.com或cloudflare.com或someotherDomain.com执行脚本 图像只会从您的域和cloudflare加载。 其他所有内容都只允许来自您的域名。

非常好的来源: ole.michelsen.dk