在 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 参数。请随意使用该解决方案。
当我在 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 参数。请随意使用该解决方案。