php 富文本编辑器(Ueditor)的安全过滤机理

最近做博客系统,使用了最新的Ueditor(百度编辑器),比较担心安全注入的问题,做了一些测试.

我项目的思路是将编辑器中输入的内容使用htmlspecialchars方法实体化后存入数据库中,然后在需要显示文章时使用htmlspecialchars_decode还原.

但是我发现一个奇怪的现象:

例如我在Ueditor中输入:<script type='text/javascript'>console.log('sb');</script>和图片以及一段编辑好的文字。使用htmlspecialchars_decode 还原后,html图片显示正常,文字样式正常。而那一段js代码原样输出了<script type='text/javascript'>console.log('sb');</script>,我查看其html源码为:&lt;script type=&#39;text/javascript&#39;&gt;console.log(&#39;sb&#39;);&lt;/script&gt;

再进一步看

我Ueditor输入的这段<script type='text/javascript'>console.log('sb');</script>经htmlspecialchars后为:

&lt;p&gt;&amp;lt;script type=&amp;#39;text/javascript&amp;#39;&amp;gt;console.log(&amp;#39;sb&amp;#39;);&amp;lt;/script&amp;gt;&lt;/p&gt;
而我直接将<script type='text/javascript'>console.log('sb');</script>进行htmlspecialchars后为:
&lt;script type='text/javascript'&gt;console.log('sb');&lt;/script&gt;

这两个地方的不同,让Ueditor有效的阻止掉了script脚本的运行,那么ueditor 在我提交表单之前对script标签做了什么安全处理?

这样是不是能有效的防止script脚本的过滤,在后台需不需要再利用htmlpurifier之类进行白名单过滤了。在富文本编辑器这种案例中既要保持样式,又要过滤xss,单独替换<符号肯定无法实现了,是不是只有通过白名单一条路了。请大家指教

阅读 4.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题