此链接描述了使用fckEditor对我的应用程序的攻击: http://knitinr.blogspot.com/2008/07/script-exploit-via-fckeditor.html
如何在仍使用fckEditor的同时确保我的应用安全?它是fckEditor配置吗?在我从fckEditor获取文本后,我应该在服务器端进行一些处理吗?
这是一个难题,因为fckEditor 使用 html标签进行格式化,所以当我显示文本时,我不能只进行HTML编码。
答案 0 :(得分:7)
清理HTML服务器端,没有其他选择。对于PHP,它将是HTML Purifier,对于.NET我不知道。清理HTML很棘手 - 剥离脚本标记是不够的,你还需要注意on *事件处理程序,甚至更多,这要归功于IE的愚蠢行为。
同样使用自定义html和css,很容易劫持你网站的外观和布局 - 使用覆盖所有屏幕的覆盖(绝对定位)等。为此做好准备。
答案 1 :(得分:4)
该错误实际上并不是FCKeditors的错误。只要您让用户编辑将在您的网站上显示的HTML,除非您在输出数据之前检查数据,否则他们总是有可能造成伤害。
有些人使用HTMLencoding来做这件事,但这会破坏FCKeditor所做的所有格式化,而不是你想要的。
答案 2 :(得分:2)
在我从fckEditor获取文本后,我应该在服务器端进行一些处理吗?
正。 StackOverflow也有一些与此相关的早期问题。解决它的最简单方法是使用HTML库来解析用户的输入,然后转义输出中不需要的任何标记。在打印到页面时执行此操作作为后处理步骤 - 数据库中的数据应与用户键入的内容完全相同。
例如,如果用户输入<b><script>evil here</script></b>
,您的代码会在呈现页面之前将其转换为<b><script>evil here</script></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进行清理,从而减少恶意。