如何使用 Summernote 防止使用 PHP 进行危险的 HTML 输入?

Posted

技术标签:

【中文标题】如何使用 Summernote 防止使用 PHP 进行危险的 HTML 输入?【英文标题】:How to prevent dangrous HTML input with PHP using Summernote? 【发布时间】:2016-04-07 13:32:33 【问题描述】:

我最近发现了 Summernote,它似乎是一个不错的应用程序,虽然我偶然发现了一个问题。

您可以在进入源代码时添加恶意 html 代码,例如:

<plaintext>
<script>

那么如何使用 php 来防止这种情况发生呢?我确实希望用户能够使用某些样式标签,例如:

<h1>
<p>

编辑器自动使用的。

我知道我可以继续使用 str_replace() 来检查字符串中是否包含任何恶意 HTML,但我认为必须有更简单的方法。

【问题讨论】:

Solution:使用GitHub Flavored Markdown或者你可以使用strip_tags可选参数来指定你想要的标签,其余的将被剥离。 我确实希望人们可以说 ,在这种情况下,只有 应该被翻译成他们的 ascii 代码或其他任何名称。所以没有被剥离,只是替换为安全文本,并且只有在它是恶意的时候。</plaintext></span> <span class="comcopy">我相信您正在寻找<code>htmlspecialchars</code>,但我不确定您将如何应用到单个恶意标签。</span> <span class="comcopy">@Script47 这确实有效,尽管它适用于每个标签,如果用户想要使用 <b> 标签,这会搞砸。</b></span> <span class="comcopy">这就是为什么我的第一条评论建议使用无标签解决方案,为您省去很多试图过滤掉恶意标签的麻烦。</span> <strong>【参考方案1】:</strong> <p>通常,这里的问题是您在 HTML 上下文中使用文本而没有正确转义所有保留的实体,这可能会导致注入您所描述的任意 HTML。 <code>htmlspecialchars()</code>是这个问题的正常解决方案。</p> <p>但是,您想支持 HTML,但又不想支持所有 HTML。因此,您需要完全不同的解决方案。 HTML Purifier 是一种满足您需求的解决方案。它解析数据并且只通过白名单标签。来自他们的documentation:</p> <pre><code>require_once '/path/to/HTMLPurifier.auto.php'; $config = HTMLPurifier_Config::createDefault(); $purifier = new HTMLPurifier($config); $clean_html = $purifier-&gt;purify($dirty_html); </code></pre> <p>【讨论】:</p> <span class="comcopy">问题是它完全删除了 <plaintext> 和其他恶意 HTML,我希望将恶意 HTML 转换为安全的 HTML。</plaintext></span> <span class="comcopy">我也刚刚发现 HTML Purifier 不支持 HTML 5,所以虽然它确实有效,但它确实让一些可能是恶意的标签通过。</span> <span class="comcopy">您可以指定要保留的内容的白名单。而且,我怀疑它会让任何恶意的东西通过。你累了吗?如果是这样,请提交错误报告。</span> <span class="comcopy">由于它有效,我将把它标记为答案。我还在这里找到了一个 HTML 5 库:github.com/kennberg/php-htmlpurfier-html5 所以希望这就足够了。谢谢。</span><p>以上是关于如何使用 Summernote 防止使用 PHP 进行危险的 HTML 输入?的主要内容,如果未能解决你的问题,请参考以下文章</p> <p > <a style="color:blue;" href="https://it.cha138.com/wen4/show-15309431.html">如何通过 ajax 从 Summernote 编辑器将数据发送到 php 文件?</a></p> <p > <a style="color:blue;" href="https://it.cha138.com/wen5/show-14168813.html">如何在 vueJS 中使用summernote?错误:summernote 不是函数</a></p> <p > <a style="color:blue;" href="https://it.cha138.com/zd/show-15169147.html">防止 Summernote html 所见即所得编辑器页面被内容 CSS 更改</a></p> <p > <a style="color:blue;" href="https://it.cha138.com/wen1/show-15412709.html">如何使用流星JS在summernote中收取数据?</a></p> <p > <a style="color:blue;" href="https://it.cha138.com/wen5/show-15157724.html">如何在模板中使用 django-summernote</a></p> <p > <a style="color:blue;" href="https://it.cha138.com/wen2/show-15374906.html">Summernote 图片上传不工作(PHP)</a></p> </article> </div> </div> </div> </section> </div> </div> <script type="text/javascript" src="https://it.cha138.com/skin/m03sred/style/js/fixit.js"></script> <script type="text/javascript" src="https://it.cha138.com/file/script/content.js"></script><script> $(function () { $('#manual').addClass('current'); $('#manual').parent('ul').addClass('in'); }) </script> <footer class="footer"> <div class="container content"> <div class="has-text-centered"> <p class="has-text-grey is-size-7">(c)2006-2024 SYSTEM All Rights Reserved <a href="https://it.cha138.com">IT常识</a> </p> </div> </div> </footer> <script src="https://it.cha138.com/skin/m03sred/style/js/effect.js"></script> </body> </html>