在 Symfony 中防止 XSS

Prevent XSS in Symfony

当我在 Symfony2 中使用所见即所得的编辑器显示来自文本区域的数据时,如何防止 XSS?

我有一个带有 tinyMCE 编辑器的文本区域。我可以插入粗体、斜体代码,然后我可以使用 twig 过滤器在浏览器中显示数据:

{{miArticulo.contenido|raw}}

但是当我在文本区域中编写脚本时,例如警报,它也会在浏览器中呈现;

如何只显示来自 HTML 的安全元数据?我尝试使用 twig 过滤器自动转义环绕,但我失败了:

{% autoescape 'html' %}{{miArticulo.contenido|raw}}{% endautoescape %}

我可以显示安全内容 con twig 还是我应该尝试使用其他库,例如 HTMLPurifier

在这种情况下,我使用的是这个包:

https://github.com/Exercise/HTMLPurifierBundle

当用户发送 HTML 时,您可能会在表单上使用它获得最佳性能。 (通过文档中描述的表单数据转换器)

据我所知,没有其他选项可以阻止将 js 放入 html 的所有巧妙方法。

除了使用像 Twig 这样的模板引擎,我强烈建议实现 Content Security Policy 随机数 headers。

header('Content-Security-Policy', 'script-src 'nonce-randomNonceString' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:; object-src 'none');

他们禁止 运行 明确列入白名单的脚本。 缺点是您需要添加随机生成的 nonce 代码中每个 <script> 标记的参数。

我写了一个详细的 tutorial how to implement CSP 3 with nonce in Symfony,所以每个请求都会自动生成 nonce 参数。请随意使用该解决方案。