如何实施内容安全策略?

Ric*_*ard 5 php security content-security-policy

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

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

在 PHP 中,您可以在您服务的页面上设置标题,但是如果您只有一个 HTML 文件呢?您是否必须通过您的网络服务器、apache 或类似服务器来完成?这似乎不是一个简单的方法。

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

谢谢!

use*_*609 8

归根结底,选择权在于您。您可以在 apache 网络服务器中全局设置它。在这种情况下,它将应用于每个页面。如果需要更精细的方法,您还可以在各个页面上设置标题。

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

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

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

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

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

这可能也对 apache 配置感兴趣

使用 Apache 2.4 生成随机数(用于内容安全策略标头)

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

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

这也是一篇优秀的论文“CSP Is Dead,Long Live CSP!” 来自 google 研究,特别参考第 4 节:通过绕过白名单和传播信任来改进 CSP。

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

进行大量阅读,当您准备好实施时,请使用 REPORT ONLY 模式指令,这样您就可以在不执行策略的情况下获取控制台消息。

Content-Security-Policy-Report-Only: <policy-directive>; <policy-directive>
Run Code Online (Sandbox Code Playgroud)

一旦你高兴了,你就可以执行规则:

Content-Security-Policy: <policy-directive>; <policy-directive>
Run Code Online (Sandbox Code Playgroud)


Sco*_*ski 3

这似乎不是一个容易的方法。

是的,不是。不过,您可以采取一些巧妙的捷径。

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

在 PHP 中,您可以在您提供的页面上设置标头,但如果您只有一个 HTML 文件怎么办?您必须通过网络服务器、apache 或类似服务器来完成此操作吗?这似乎不是一个容易的方法。

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

A:

{
    "script-src": [ "self",  "https://apis.google.com" ]
}
Run Code Online (Sandbox Code Playgroud)

乙:

add_header Content-Security-Policy "script-src: 'self' https://apis.google.com";
Run Code Online (Sandbox Code Playgroud)

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

include /path/to/script/output.conf;
Run Code Online (Sandbox Code Playgroud)

由于该系统,如果我想更改 CSP 标头,我只需要编辑 JSON 文件。

这就是我如何使 CSP 标头易于管理。你的旅费可能会改变。

这是:CSP Builder