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

5 asp.net-mvc richtext

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

SLa*_*aks 3

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

编辑:请注意,如果允许超链接或图像,则必须验证srchref标签。我建议使用 来解析它System.Uri,将方案限制为http,也许还可以将域限制为您的站点(取决于您希望用户能够执行的操作)。

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

编辑:例如,请参阅这个问题


第二编辑

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

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

然而,通过标准 XML 解析器运行它、拒绝任何无法解析的输入并使用解析器中的格式化 XML 可能是一个好主意(正如我上面提到的)


第三编辑

有很多富文本编辑器;对于 MVC,我想我会推荐FCKEditor。它会为您转义输入,但您不能完全依赖它,因为攻击者可以禁用 JavaScript 或伪造自己的 HTTP 请求。(您仍然需要验证服务器上的 HTML)。有许多用于 Web 表单的丰富编辑器(我假设它们进行服务器端验证);还没有 MVC 的