在db中存储HTML,同时避免持久的xss / sql注入

时间:2010-11-29 20:21:23

标签: asp.net security xss sql-injection

我正在asp.net中构建一个页面,它将使用tiny mce在页面上提供一个富文本编辑器。 Tiny mce将富文本输出为html,我想将其保存到数据库中。然后在以后,我想从数据库中提取HTML并将其显示在页面中。

我担心允许恶意的html,js标签进入我的数据库,以后会输出。

有人可以告诉我在我的过程中我应该html编码/解码等,以防止持久的xss攻击和/或SQL注入攻击吗?

4 个答案:

答案 0 :(得分:2)

我们使用Microsoft Web Protection Library来删除任何有潜在危险的HTML。我的意思是“在路上” - 当页面发布到服务器时,我们使用MS WPL擦除HTML并获取结果并将其扔进数据库。甚至不要让任何不良数据进入您的数据库,您将更安全。至于编码,你不会想要搞乱HTML编码/解码 - 只需要使用你的tinyMCE控件中的任何内容,擦除它并保存它。然后在你的显示页面上,只需将它存在于你的数据库中,就像文字控件或类似的东西一样,你应该很好。

我相信Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(input)会完全按照您的意愿行事。

答案 1 :(得分:0)

这些管理员是否正在使用RTE?如果是这样,我不会担心。

如果没有,那么我不建议使用WinyIWYIG,例如TinyMCE。你必须真正寻找恶意输入,很有可能,你错过一些。由于RTE输出纯HTML,我假设你想要,你不能只转换HTML实体。这有点消除了使用TinyMCE的全部意义。

在将数据插入数据库时​​,在后端完成停止SQL注入。您将需要使用参数化查询或转义输入(不确定如何在ASP.NET中,我是一个PHP人。)

答案 2 :(得分:0)

难道你不能使用一个使用BBCode的富文本编辑器并在服务器上转义需要转义的所有内容,然后将BBCode转换为HTML标记吗?

您也可以在客户端上生成BBCode,而不是在服务器上将HTML标记转换为BBCode,转义剩余的HTML并将结果从BBCode转换回HTML。

答案 3 :(得分:0)

有两种方法,你可能会使用第一种方法

1)您将列出允许的标签并转义/剥离其余标签。 TinyMCE可能有一些功能禁止用户使用某些标签..(这只是客户端,你应该在服务器上验证它)

2)您将以不同的方式编码允许的标签([b]粗体[/ b]),而不是将所有内容保存到数据库中,同时渲染转义所有内容而不是解释您的特殊标签

第三种方法:如果用户是管理员(那个应该知道他在做什么的人),那么你可以在不逃避的情况下离开他们......他是他自己错误的责任人....