我正在使用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>";
在数据库
$detail
用户界面
Alu Vazi
我喜欢alu vazi <p><strong>Alu Vazi</strong></p>
<p>I love alu vazi with<script>alert("XSS")</script></p>
提醒(“XSS”)<script>
答案 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<script>alert("XSS")</script></p>
您已经在此处转义<script>
标记,因此HTML Purifier无需解析。它将作为结果输出到页面上,但您已经有效地中和了XSS尝试。
在您的代码中,在保存到数据库之前,某些内容已经转义为HTML字符。