如何使用 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
可选参数来指定你想要的标签,其余的将被剥离。
我确实希望人们可以说 htmlspecialchars
,但我不确定您将如何应用到单个恶意标签。
@Script47 这确实有效,尽管它适用于每个标签,如果用户想要使用 标签,这会搞砸。
这就是为什么我的第一条评论建议使用无标签解决方案,为您省去很多试图过滤掉恶意标签的麻烦。
【参考方案1】:
通常,这里的问题是您在 HTML 上下文中使用文本而没有正确转义所有保留的实体,这可能会导致注入您所描述的任意 HTML。 htmlspecialchars()
是这个问题的正常解决方案。
但是,您想支持 HTML,但又不想支持所有 HTML。因此,您需要完全不同的解决方案。 HTML Purifier 是一种满足您需求的解决方案。它解析数据并且只通过白名单标签。来自他们的documentation:
require_once '/path/to/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);
【讨论】:
问题是它完全删除了以上是关于如何使用 Summernote 防止使用 PHP 进行危险的 HTML 输入?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 ajax 从 Summernote 编辑器将数据发送到 php 文件?
如何在 vueJS 中使用summernote?错误:summernote 不是函数