gpt4 book ai didi

javascript - 使用 htmlpurifier 禁止 jqte jQuery 文本编辑器中的脚本标签和事件监听器

转载 作者:行者123 更新时间:2023-12-03 07:57:12 25 4
gpt4 key购买 nike

我正在使用 jqte 为 cms 的用户提供我为他们的内容编写了一些所见即所得的内容。为了公开输出内容,我使用 htmlPurifier,所以没有办法,编辑者会对网站的访问者造成伤害。

但是他们可以放置

<button onclick="alert('this sux')">klick me</button>

在文本区域中,下一个用户将找到一个工作按钮。

<script>evilcode</script>

甚至被执行。

有没有人在我之前处理过这个问题,并且可以在这里给我一个优雅的解决方案的提示?

最佳答案

我要冒险说你没有 htmlspecialchars()当您将以前提交的数据加载到表单中时,您应该在输出周围进行更改 - 不过,您应该这样做,因为它仍然是文本区域文本。您所见即所得的文本将被解释为 HTML,但不要将其与实际的 HTML 混淆。 :)

作为安慰,请知道这种混淆非常常见 ( it keeps happening ),并且有很多很多人都遇到与您所描述的问题完全相同的问题。

让我们看一下工作流程以及可能出现问题的地方:

问题工作流程

当有人写<tag>时加载 WYSIWYG 到 WYSIWYG 字段中的富文本中,编辑器看到有人想要将 HTML &lt;tag&gt;进入消息。

当有人将粗体文本写入富文本时,编辑器会看到有人想要将 HTML <b>bold text</b> (或类似的)到消息中。

同时,在后台显示文本 &lt;tag&gt; <b>bold text</b> (或其他)被存储在文本区域中。为了将文本保留为 HTML 上下文中的文本,它使用 HTML 编码进行编码,无形地将其转换为 &amp;lt;tag&amp;gt; &lt;b&gt;bold text&lt;/b&gt; .

但是,当按下提交按钮时,文本区域 ( &lt;tag&gt; <b>bold text</b> ) 的文本会发送到您的服务器,因为表单数据本身当然不是 HTML 编码的(它不是嵌入在 HTML 中) - 它只是一组键和值,并且您需要文本区域的值。

现在,当您在服务器端应用程序中构建 HTML 以再次加载消息以进行进一步编辑时,您希望字段的进行 HTML 编码,因为您将该值放入 HTML 上下文中。您之前所做的是创建 <textarea>&lt;tag&gt; <b>bold text</b></textarea> ,它将 HTML 放入 HTML 上下文中。基本上在所有浏览器中,这使得文本区域呈现 <tag> <b>bold text</b> 。哎哟! (想象一下,如果有人将 </textarea> 作为其原始消息的一部分!)

不幸的是,所见即所得编辑器仍然擅长在那里显示您想要的内容,这让每个人都感到困惑。对于大多数用例,您甚至不会注意到差异,这就是这个错误如此普遍的原因。

但是,在构建页面的 HTML 时,您实际上想要构建 <textarea>&amp;lt;tag&amp;gt; &lt;b&gt;bold text&lt;/b&gt;</textarea> 。这使得文本区域呈现 &lt;tag&gt; <b>bold text</b> - 这正是您想要的。

您的Current Solution ,以及为什么它会崩溃

您当前拥有的解决方案通过htmlspecialchars_decode()运行提交的文本。 ,这变成 &lt;tag&gt;进入<tag> ,从而让 HTML Purifier 消除它。您不再需要担心&lt;tag&gt;被解释为 <tag>在所见即所得的背景下。

但是,不幸的是,您有两个问题:

1) 如果 HTML Purifier 不剥离标签,人们将无法再提交有关标签的消息。根据您的文本区域的用例,这可能不是问题。也许您不希望人们能够提交 HTML 消息,例如 If you're making your own website, you can use &lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js" language="javascript"&gt; instead of hosting the jquery.js yourself - 使用您当前的解决方案,类似的消息将被清理为 If you're making your own website, you can use instead of hosting the jquery.js yourself通过 HTML Purifier。

2) 危险得多,人们仍然可以攻击你!尝试编写文本 &lt;script&gt;alert(1);&lt;/script&gt;进入你的编辑器(这样编辑器就会看到你想要提交的 HTML &amp;lt;script&amp;gt;alert(1);&amp;lt;/script&amp;gt; )并点击提交。您的解决方案会将其变成 &lt;script&gt;alert(1);&lt;/script&gt; ,您将其放入 <textarea> 中然后不幸的是你又回到了第一个方向。

实际解决方案

删除您的htmlspecialchars_decode()解决方案(但继续净化!),而是输入 htmlspecialchars()围绕你的输出。您的所见即所得仍然有效,并且您将不再绕过 HTML Purifier 的清理。

关于javascript - 使用 htmlpurifier 禁止 jqte jQuery 文本编辑器中的脚本标签和事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com