2011-05-04 79 views
0

假设您希望允许非技术用户控制出现在公共站点/应用程序中的内容。如果内容仅为文本,则可以在显示文本时对文本进行HTML编码,以防止恶意脚本在进入数据库时​​执行。安全地呈现HTML而不使用HTML编码

如果要将数据显示为HTML(即通过所见即所得编辑器输入数据)时,有哪些选项可用于防止此情况发生?每次我想要显示它时,我将不得不使用黑名单清理数据?

此外,假设数据已被泄漏。如果HTML编码不是一种选择,我真的很想找到方法来限制这种攻击造成的损失。

为了我的目的,该网站正在运行ASP.NET MVC 3,并且正在使用jQuery。

回答

3

您始终可以将元素和属性名称列入白名单而不是列入黑名单。 .NET HTML whitelisting (anti-xss/Cross Site Scripting)讨论了用于.NET的白名单HTML清理程序。

其他选项包括将内容加载到一次性域中的iframe中,但这不会阻止内容执行某些类型的攻击 - 重定向到钓鱼页面,开始下载恶意软件,扫描本地网络,利用XSRF漏洞使用用户的凭据等

+0

我去了微软的AntiXSS库 - 使用起来非常简单。听到默认的HTML编码是黑名单方法,我真的很惊讶吗?无论如何 - 感谢指引我迈向白名单(我意识到这个概念 - 只是没有想到将其应用于HTML)。 – Mayo 2011-05-06 14:58:47

+0

“默认的HTML编码是黑名单方法?”:因为字符集是有限的,它同时列入黑名单和白名单。假设字符集是“abcd”如果你说“字符a和b不允许”或者“c和d允许”是相同的。 – usr 2011-05-26 18:43:46

+0

@usr。清楚的是,我只是在元素和属性名称的背景下讨论了白名单。根据一些定义,你是对的,当涉及到有限集合时,黑名单和白名单之间没有区别。但有些人将白名单定义为只允许那些你可以证明是安全的事物,而将黑名单列入禁止那些证明有害的事物。根据这些定义,有限集合的黑名单和白名单元素之间可能存在重大差异。 – 2011-05-26 19:16:35