如何安全地使用fckEditor,而没有跨站点脚本编写的风险?
此链接描述了使用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>,则代码会将其翻译为<b> <script> evil here </ script> </ 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,从而减少了恶意。