没有htmlspecialchars的HTMLPurifier

时间:2015-03-17 16:12:19

标签: php htmlspecialchars htmlpurifier

我正在使用HTMLPurifier进行简单的Tinymce WYSIWYG。如果我不使用htmlspecialchars,它是否会向XSS Attack开放?这就是我正在做的事情

$detail = $purifier->purify($detail);

清除textarea的数据。如果我使用htmlspecialchars,它会删除所有基本标记,这对于WYSIWYG编辑器来说不是用户友好的。但问题是,这也允许<script> tag

如果我将conf setting更改为

$config->set('ExtractStyleBlocks.1', true);

<不允许><script> tag<仅转换><script>。但它显示{ {1}},<p>This is paragraph</p>等等。它不应向用户显示<strong>This text is bold</strong>,而应仅显示文字。

我怎样摆脱这个问题。

请帮忙。谢谢你的时间。

修改

这是我的HTMLPurifier初始化

<p> and other simple tags

从数据库中获取数据

$config = HTMLPurifier_Config::createDefault();
//$config->set('ExtractStyleBlocks', true);
$config->set('HTML.ForbiddenElements', array('script','style','applet'));
$purifier = new HTMLPurifier($config);

while(mysqli_stmt_fetch($stmt1)){ $id=htmlspecialchars($id); $title=htmlspecialchars($title); $detail = $purifier->purify($detail); $posts.="<div id='date_news'><div id='news_holder$id' class='news_holder'><h3 id='show_title'>".htmlspecialchars($title)."</h3>".$detail."</div>";

的HTML

在数据库

$detail

用户界面

Alu Vazi

我喜欢alu vazi <p><strong>Alu Vazi</strong></p> <p>I love alu vazi with&lt;script&gt;alert("XSS")&lt;/script&gt;</p> 提醒(“XSS”)<script>

1 个答案:

答案 0 :(得分:0)

好的,按照我的评论尝试将其添加到您的HTML Purifier配置中,默认情况下应启用它,但值得一试。

$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.ForbiddenElements', array('script','style','applet'));
$purifier = new HTMLPurifier($config);

修改

<p>I love alu vazi with&lt;script&gt;alert("XSS")&lt;/script&gt;</p>

您已经在此处转义<script>标记,因此HTML Purifier无需解析。它将作为结果输出到页面上,但您已经有效地中和了XSS尝试。

在您的代码中,在保存到数据库之前,某些内容已经转义为HTML字符。