【发布时间】: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<script>alert("XSS")</script></p>
用户界面
阿鲁瓦兹
我爱alu vazi,<script>alert("XSS")</script>
【问题讨论】:
-
您可以使用 HTML Purifier 指定要接受哪些元素我认为...我会检查并回来。
-
你在净化什么?输入数据库或回显到
<textarea>...或两者兼而有之的数据? -
我正在从数据库中获取数据,并净化该数据。我已将数据按原样插入到数据库中。不回显到 textarea,而是在用户的页面(屏幕)中
-
@CD001 我已经更新了我的问题,请看一下
-
@Coder - 准备好的语句不进行 HTML 实体转换,但 TinyMCE 可以,我很确定是您的 WYSIWYG 编辑器在插入数据库之前转换了
<>字符。
标签: php htmlspecialchars htmlpurifier