我最近发现了Summernote,看起来这是一个不错的应用程序,虽然我偶然发现了一个问题。
您可以在进入源代码时添加恶意HTML代码,例如:
<plaintext>
<script>
那么如何使用PHP来防止这种情况呢?我希望用户能够使用某些样式标签,例如:
<h1>
<p>
编辑器自动使用。
我知道我可以继续使用str_replace()来检查字符串中是否包含任何恶意HTML,但我认为必须有一种更简单的方法。
答案 0 :(得分: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);