如何安全地使用fckEditor,而没有跨站点脚本编写的风险?

时间:2020-03-05 18:54:15  来源:igfitidea点击:

此链接描述了使用fckEditor入侵我的应用程序的漏洞:
http://knitinr.blogspot.com/2008/07/script-exploit-via-fckeditor.html

仍在使用fckEditor时如何确保我的应用程序安全?它是fckEditor配置吗?从fckEditor获取文本后,是否应该在服务器端进行某些处理?

这是一个难题,因为fckEditor使用html标记来设置其格式,因此当我显示文本时,我不能只是HTML编码。

解决方案

回答

该错误实际上不是FCKeditors错误。只要我们允许用户编辑将在网站上显示的HTML,除非我们在输出数据之前先检查数据,否则他们总是有可能造成伤害。

有些人使用HTMLencoding来执行此操作,但这会破坏FCKeditor完成的所有格式设置,而不是我们想要的格式。

也许我们可以使用Microsoft反跨站点脚本库。 MSDN上的样本

回答

清理html服务器端,别无选择。对于PHP,它将是HTML Purifier,对于.NET,我不知道。清理HTML是很棘手的事情,剥离脚本标签是不够的,例如,由于IE的愚蠢,我们还必须提防on *事件处理程序,甚至更多。

另外,使用自定义html和CSS,可以很容易地使用覆盖所有屏幕等的叠加层(绝对定位)来劫持网站的外观和布局。为此请做好准备。

回答

Is it some processing I'm supposed to do server-side after I grab the text from fckEditor?

恰恰。 StackOverflow也有一些与此相关的早期问题。解决此问题的最简单方法是使用HTML库解析用户的输入,然后转义输出中不需要的所有标签。在打印到页面时,将其作为后处理步骤-数据库中的数据应与用户键入的内容完全相同。

例如,如果用户在此处输入<b> <script> evil </ script> </ b>,则代码会将其翻译为&lt;b> &lt;script> evil here &lt;/ script> &lt;/ b>在呈现页面之前。

并且不要使用正则表达式来解决这个问题,这只是聪明人再次提出来的邀请。

回答

I understand the DONTS. I'm lacking a DO.

是否需要使用FCKEditor,还是可以使用其他编辑器/标记语言?我建议使用MarkOver和WMD Editor,这与StackOverflow所使用的语言相同。 .NET的Markdown库应该有一个转义所有HTML标记的选项-确保将其打开。

回答

XSS是一件棘手的事情。我建议阅读:

  • HTML是人道标记语言吗?
  • 安全的HTML和XSS

无论如何,我的总结是归结为总结,我们只需要允许接受严格接受的项目即可;我们不能拒绝已知的漏洞利用媒介,否则我们将永远处于永恒的斗争背后。

回答

可以将FCKEditor配置为仅使用几个标签。我们将需要对所有内容进行编码,除了少数几个标签。

这些标签为:<strong> <em> <u> <ol> <ul> <li> <p> <blockquote> <font> <span>。

字体标签仅应具有face和size属性。
span标签应仅具有class属性。

这些标签不得使用其他属性。

回答

我认为某些人提出的问题不是Fckeditor仅编码一些标签。这是天真的假设,邪恶的用户将使用Fckeditor编写恶意代码。允许手动更改输入的工具很多。

我将所有用户数据视为已污染;并使用Markdown将文本转换为HTML。它清除了文本中发现的任何HTML,从而减少了恶意。