处理MVC应用程序中的RTF文本

时间:2009-07-15 17:51:29

标签: asp.net-mvc richtext

在Web应用程序中使用富文本的最佳做法是什么?我不想让自己容易受到脚本攻击。数据是否应该编码进入数据库,然后在显示回用户时进行解码?有关富文本编辑器的任何建议,可以处理删除脚本标记或编码输入的标记等内容吗?

2 个答案:

答案 0 :(得分:2)

您应选择已知标记和属性的白名单,将用户输入解析为XML,并删除不在白名单中的每个标记或属性。

编辑:请注意,如果您允许超链接或图片,则必须验证srchref标记。我建议使用System.Uri解析它,将方案限制为http,并将域名限制为您的网站(取决于您希望用户能够做什么)。

以前也做过类似的事情;谷歌他们。

编辑:例如,请参阅this question


2 nd 编辑

在将数据放入数据库之前,不应对数据进行编码。只要您使用参数(如果您不是,真的应该),数据库将完全不受您放入其中的任何内容的影响。

如果您的输入清理是安全的(参见上文),如果您对其进行编码并在途中解码它将没有任何区别,并且如果清理不安全,则编码将无济于事。

但是,通过标准XML解析器运行它,拒绝任何不解析的输入,并使用解析器中的格式化XML(如上所述)

可能是个好主意。

3 rd 编辑

那里有许多富文本编辑器;对于MVC,我想我会推荐FCKEditor。它将为您逃避输入,但您必须完全不依赖它,因为攻击者可以禁用JavaScript或伪造自己的HTTP请求。 (您仍然需要在服务器上验证HTML)。 Web表单有很多丰富的编辑器(我认为,它可以进行服务器端验证);没有任何MVC(尚)

答案 1 :(得分:0)

最好的选择是对发送给用户的数据进行编码,而不是在数据库中对其进行编码。据我所知,asp.net通过验证输入来防止脚本攻击。