此链接描述了使用 fckEditor 对我的应用程序的利用:http: //knitinr.blogspot.com/2008/07/script-exploit-via-fckeditor.html
如何在仍然使用 fckEditor 的同时确保我的应用程序安全?它是 fckEditor 配置吗?从 fckEditor 获取文本后,我应该在服务器端进行一些处理吗?
这是一个难题,因为 fckEditor使用html 标签进行格式化,所以当我显示文本时不能只进行 HTML 编码。
此链接描述了使用 fckEditor 对我的应用程序的利用:http: //knitinr.blogspot.com/2008/07/script-exploit-via-fckeditor.html
如何在仍然使用 fckEditor 的同时确保我的应用程序安全?它是 fckEditor 配置吗?从 fckEditor 获取文本后,我应该在服务器端进行一些处理吗?
这是一个难题,因为 fckEditor使用html 标签进行格式化,所以当我显示文本时不能只进行 HTML 编码。
清理 html 服务器端,别无选择。对于 PHP,它将是HTML Purifier,对于 .NET,我不知道。清理 HTML 很棘手 - 去除脚本标签是不够的,您还必须注意 on* 事件处理程序,甚至更多,这要归功于 IE 的愚蠢。
此外,使用自定义 html 和 css 很容易劫持您网站的外观和布局 - 使用覆盖所有屏幕的覆盖(绝对定位)等。为此做好准备。
该错误实际上不是 FCKeditors 的错误。只要您让用户编辑将在您的网站上显示的 HTML,除非您在输出数据之前检查数据,否则他们总是有可能造成伤害。
有些人使用 HTMLencoding 来执行此操作,但这会破坏 FCKeditor 完成的所有格式,而不是您想要的。
也许您可以使用Microsoft Anti-Cross Site Scripting Library。MSDN上的示例
从 fckEditor 获取文本后,我应该在服务器端进行一些处理吗?
恰恰。StackOverflow 也有一些与此相关的早期问题。解决它的最简单方法是使用 HTML 库来解析用户的输入,然后转义输出中不需要的任何标签。在打印到页面时将其作为后处理步骤执行 - 数据库中的数据应该与用户输入的数据完全相同。
例如,如果用户输入<b><script>evil here</script></b>
,您的代码将<b><script>evil here</script></b>
在呈现页面之前将其转换为。
并且不要使用正则表达式来解决这个问题,这只是邀请聪明的人再次打破它。
FCKEditor 可以配置为仅使用几个标签。除了那几个标签之外,您将需要对所有内容进行编码。
这些标签是:<strong> <em> <u> <ol> <ul> <li> <p> <blockquote> <font> <span>。
字体标签只应该有 face 和 size 属性。span 标签应该只有一个类属性。
这些标签不应有其他属性。
我了解不要。我缺少一个 DO。
是否需要使用 FCKEditor,或者您可以使用不同的编辑器/标记语言?我建议使用 Markdown 和 WMD 编辑器,StackOverflow 使用的语言相同。.NET 的 Markdown 库应该有一个转义所有 HTML 标记的选项——一定要打开它。
XSS 是一件棘手的事情。我建议阅读:
无论如何,我的总结是,归根结底,您必须只允许严格接受的项目;您不能拒绝已知的漏洞利用向量,否则您将永远支持永恒的斗争。
我认为有些人提出的问题不是 Fckeditor 只编码了几个标签。这是一个天真的假设,即邪恶的用户会使用 Fckeditor 来写他的恶意。允许手动更改输入的工具有很多。
我将所有用户数据视为已污染;并使用 Markdown 将文本转换为 HTML。它会清理文本中的任何 HTML,从而减少恶意。