HTMLPurifier没有用htmlspecialchars(HTMLPurifier witho

2019-10-22 07:13发布

我使用简单HTMLPurifier Tinymce WYSIWYG 。如果我不使用htmlspecialchars ,这将是开放的XSS Attack呢?这是我在做什么

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

净化数据为textarea 。如果我用htmlspecialchars ,它去除所有基本的标签,以及这是不是用户友好的一个WYSIWYG editor.But的问题是,这允许<script> tag为好。

如果我改变conf setting

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

它不允许<><script> tag .Convert <><script>而已。不过它显示<p>This is paragraph</p> <strong>This text is bold</strong>和所以on.It不应该显示<p> and other simple tags用户,但只有文字。

我怎样才能摆脱这个问题。

请您的时间help.Thanks。

编辑

这里是我的HTMLPurifier初始化

$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

在数据库

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

用户屏幕

铝花瓶

我爱ALU vazi与<script>警报( “XSS”) </script>

Answer 1:

OK,下面我的意见你可以添加以下到您的HTML净化器的配置,应该默认启用的,但值得一试。

$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过滤无关的解析。 这将是网页结果输出,但你已经有效地中和XSS尝试。

在你的代码的东西是保存到数据库之前就已经逃离HTML字符。



文章来源: HTMLPurifier without htmlspecialchars