【问题标题】:Escaping tinyMCE javascript output in Symfony/Twig在 Symfony/Twig 中转义 tinyMCE javascript 输出
【发布时间】:2015-09-03 20:34:15
【问题描述】:

我在 Symfony 中使用 TinyMCE。一切正常,我将用户输入保存在数据库中,但我想让用户的 javascript 在显示他们的消息时不在前端运行。我试过了

  {{ message.content|raw }}

但问题是它运行的是 javascript 代码。

然后我尝试了

{% autoescape 'js' %}
{{ message.content }}
{% endautoescape   %}

但它将javascript打印为\x3C\x2Fp\x3E之类的奇怪字符。

如何将 javascript 代码打印为纯文本?或者如何显示格式正确的文本而不运行 javascript 部分?

例如,

<b>test</b> <script>alert()</script>

要显示类似于

测试 alert()

【问题讨论】:

  • 我有一个类似的问题,不过,我决定完全删除
  • 奇怪的是以前没有人想到这一点。 XSS 攻击是最容易做到的。谢谢,我去看看。

标签: javascript symfony escaping tinymce twig


【解决方案1】:

使用strip_tags函数:

{{ message.content | striptags('<p><b><br>') | raw }}

strip_tags 内的标签是允许的标签。

【讨论】:

  • 没有办法恢复吗?我想允许除
  • 在这种情况下你可以使用replace:{{ message.content | replace({"&lt;script&gt;" : "", "&lt;/script&gt;" : ""}) | raw }}但是允许用户输入html标记是不安全的,考虑使用markdown,或者如果不适合你,那么使用类似html purifier的东西。
  • 为什么不安全?那我怎样才能让他们使用 tinyMCE?
  • 因为如果您允许任何 html 标签,用户可以发送任何恶意代码,可以更改页面布局添加 div、样式等。您也可以在 twig 中或在保存用户输入之前使用 html 净化器包到数据库,甚至在 db 中创建额外的字段,您可以在其中保存纯化的安全输出以显示。 github.com/Exercise/HTMLPurifierBundle
猜你喜欢
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 2015-12-10
  • 2017-09-08
  • 2019-09-19
相关资源
最近更新 更多