如何安全地使用fckEditor,而不存在跨站脚本的风险?

时间:2008-09-15 19:03:23

标签: xss fckeditor

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

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

这是一个难题,因为fckEditor 使用 html标签进行格式化,所以当我显示文本时,我不能只进行HTML编码。

7 个答案:

答案 0 :(得分:7)

清理HTML服务器端,没有其他选择。对于PHP,它将是HTML Purifier,对于.NET我不知道。清理HTML很棘手 - 剥离脚本标记是不够的,你还需要注意on *事件处理程序,甚至更多,这要归功于IE的愚蠢行为。

同样使用自定义html和css,很容易劫持你网站的外观和布局 - 使用覆盖所有屏幕的覆盖(绝对定位)等。为此做好准备。

答案 1 :(得分:4)

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

有些人使用HTMLencoding来做这件事,但这会破坏FCKeditor所做的所有格式化,而不是你想要的。


也许你可以使用Microsoft Anti-Cross Site Scripting LibraryMSDN

上的示例

答案 2 :(得分:2)

  

在我从fckEditor获取文本后,我应该在服务器端进行一些处理吗?

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

例如,如果用户输入<b><script>evil here</script></b>,您的代码会在呈现页面之前将其转换为<b>&lt;script&gt;evil here&lt;/script&gt;</b>

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

答案 3 :(得分:2)

FCKEditor可以配置为仅使用几个标签。您将需要对除少数标签之外的所有内容进行编码。

这些标签是:&lt; strong&gt; &LT; EM&GT; &LT; U&GT; &LT;醇&GT; &LT; UL&GT; &LT;李&GT; &LT; p为H. &LT; BLOCKQUOTE&GT; &LT;字体&GT; &LT;跨度&GT;

字体标记只应具有面部和大小属性。 span标记应该只有一个class属性。

这些标签不应该允许其他属性。

答案 4 :(得分:0)

  

我理解DONTS。我缺少DO。

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

答案 5 :(得分:0)

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

无论如何,我的总结是,当它归结为它时,你必须只允许严格接受的项目;你不能拒绝已知的漏洞利用载体,因为或者你永远都会在永恒的斗争背后。

答案 6 :(得分:0)

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

我将所有用户数据视为污染;并使用Markdown将文本转换为HTML。它会对文本中的任何HTML进行清理,从而减少恶意。