在 Symfony 中防止 XSS

Prevent XSS in Symfony

本文关键字:XSS Symfony      更新时间:2023-09-26

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

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

{{miArticulo.contenido|raw}}

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

如何仅显示来自 HTML 的安全元?我尝试使用树枝过滤器自动逃逸环绕,但我失败了:

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

我可以显示安全的内容吗,或者我应该尝试使用其他库,例如 HTMLPurifier

除了使用像Twig这样的模板引擎外,我强烈建议实现内容安全策略nonce标头。

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

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

我写了一个详细的教程,如何在Symfony中使用nonce实现CSP 3,因此nonce参数是每个请求自动生成的。随意使用该解决方案。

在这种情况下,

我正在使用这个捆绑包:

https://github.com/Exercise/HTMLPurifierBundle

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

据我所知,没有其他选择可以阻止它以所有聪明的方式将 js 放入 html。