【问题标题】:HTMLPurifier without htmlspecialchars没有 htmlspecialchars 的 HTMLPurifier
【发布时间】:2015-03-18 01:09:46
【问题描述】:

我正在使用 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>。但它显示<p>This is paragraph</p><strong>This text is bold</strong> 等等。它应该'不向用户显示<p> and other simple tags,而只向用户显示文本。

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

请帮忙。感谢您的宝贵时间。

编辑

这是我的 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>";

$detail 的 HTML

在数据库中

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

用户界面

阿鲁瓦兹

我爱alu vazi,&lt;script&gt;alert("XSS")&lt;/script&gt;

【问题讨论】:

  • 您可以使用 HTML Purifier 指定要接受哪些元素我认为...我会检查并回来。
  • 你在净化什么?输入数据库或回显到&lt;textarea&gt; ...或两者兼而有之的数据?
  • 我正在从数据库中获取数据,并净化该数据。我已将数据按原样插入到数据库中。不回显到 textarea,而是在用户的页面(屏幕)中
  • @CD001 我已经更新了我的问题,请看一下
  • @Coder - 准备好的语句不进行 HTML 实体转换,但 TinyMCE 可以,我很确定是您的 WYSIWYG 编辑器在插入数据库之前转换了 &lt; &gt; 字符。

标签: php htmlspecialchars htmlpurifier


【解决方案1】:

好的,按照我的评论尝试将它添加到您的 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>

您已经在此处转义了 &lt;script&gt; 标记,因此 HTML Purifier 无需解析任何内容。结果它将在页面上输出,但您已经有效地中和了 XSS 尝试。

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

【讨论】:

  • 您能否在您的问题中显示您的 HTML Purifier 初始化代码,以及您正在解析的示例 HTML?
  • 期待您的帮助。谢谢
  • 我不知道这是怎么回事,因为我将数据作为纯文本插入到数据库中。但无论如何,你认为,我对WYSIWYG 编辑器的 XSS 攻击是安全的这个案子?
  • 如果不坐在您旁边并查看您的所有代码,我无法回答这个问题。您只需要花时间学习编程的某些方面,然后利用您所学的知识。这一切都归结为知识/经验。
  • 嗨,还有一个问题。prepared statement 在将数据插入database 之前是否更改了&lt;script&gt; 标记?这可能是&lt;script&gt; 在我的数据库中转义的唯一原因。
猜你喜欢
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
相关资源
最近更新 更多