Ste*_*man 1 sanitization htmlpurifier laravel
我在使用HTMLPurifier php库时遇到问题.我正在为我的应用程序中的所有文本区域使用名为"Summernote"的WYSIWYG编辑器.
在sommernote里面写一些东西时:
<script>alert('test');</script>
帖子数据来自
<p><script>alert('test');</script></p>
但是,一旦通过HTMLPurifier运行,它就不会删除转换为常规字符的脚本标记.因此,当我在summernote中编辑此文本时,它实际上运行脚本!
这是处理编辑器的内容的图像:
以下是它如何存储在数据库中:
如果有人有任何想法,请告诉我!
编辑:另外,如果我禁用Summernote WYSIWYG编辑器,则在使用HTMLPurifier进行清理时,会从textarea中成功删除标记.
我怀疑这里的根本问题是一个常见的错误:
当您将纯化的HTML输出到WYSIWYG时,您需要使用htmlspecialchars()
它.所以,而不是在渲染页面的源代码中有这个...
<textarea ...>
<p><script>alert('test');</script></p>
</textarea>
Run Code Online (Sandbox Code Playgroud)
......你需要这个:
<textarea ...>
<p>&lt;script&gt;alert('test');&lt;/script&gt;</p>
</textarea>
Run Code Online (Sandbox Code Playgroud)
那么WYSIWYG应该按预期运行.(如果没有,爱德华实际上是对的 - 你应该看一个不同的编辑.)
这是正确的方式做到这一点的原因是因为你想要的文字在您的textarea的,而不是HTML.如果您考虑没有HTML Purifier的方案,并且有人输入</textarea>
标记,然后是其他标记,则这是最容易实现的.那些会破坏<textarea>
,所见即所得.所以你把htmlspecialchars()
你输出的内容放在一边,这应该是textarea中的文本.它可以直接处理HTML标签是一个巧合 - 它相当误导,如果它不起作用可能会更好,但大多数浏览器仍然会显示HTML标签,好像它们已经被转义,如果你不这样做.
一旦文本被正确转义,那么 WYSIWYG就可以进入,获取文本并将其解释为HTML.
看看是否htmlspecialchars()
修复了您的问题.它应该这样做,不会产生副作用,即使现在看起来可能与你相反.
(当然,如果你已经htmlspecialchars()
按照描述使用了,那么我恐怕我没有想法.)
归档时间: |
|
查看次数: |
2274 次 |
最近记录: |