如何使用 Summernote 防止危险的 HTML 输入 PHP?
How to prevent dangrous HTML input with PHP using Summernote?
我最近发现了 Summernote,它似乎是一个不错的应用程序,尽管我偶然发现了一个问题。
您可以在进入源代码时添加恶意 HTML 代码,例如:
<plaintext>
<script>
那么如何使用 PHP 来防止这种情况发生?我确实希望用户能够使用某些样式标签,例如:
<h1>
<p>
编辑器自动使用。
我知道我可以继续使用 str_replace() 来检查字符串中是否包含任何恶意 HTML,但我认为必须有更简单的方法来做到这一点.
通常,这里的问题是您在 HTML 的上下文中使用文本,而没有正确转义所有保留实体,这可能导致注入任意 HTML 就像您描述的那样. htmlspecialchars()
是这个问题的正常解决方案。
但是,您想支持 HTML,但又不想全部支持。因此,您需要一个完全不同的解决方案。 HTML Purifier is one solution that does what you want. It parses the data and only passes through white-listed tags. From their documentation:
require_once '/path/to/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);
我最近发现了 Summernote,它似乎是一个不错的应用程序,尽管我偶然发现了一个问题。
您可以在进入源代码时添加恶意 HTML 代码,例如:
<plaintext>
<script>
那么如何使用 PHP 来防止这种情况发生?我确实希望用户能够使用某些样式标签,例如:
<h1>
<p>
编辑器自动使用。
我知道我可以继续使用 str_replace() 来检查字符串中是否包含任何恶意 HTML,但我认为必须有更简单的方法来做到这一点.
通常,这里的问题是您在 HTML 的上下文中使用文本,而没有正确转义所有保留实体,这可能导致注入任意 HTML 就像您描述的那样. htmlspecialchars()
是这个问题的正常解决方案。
但是,您想支持 HTML,但又不想全部支持。因此,您需要一个完全不同的解决方案。 HTML Purifier is one solution that does what you want. It parses the data and only passes through white-listed tags. From their documentation:
require_once '/path/to/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);