【发布时间】:2009-07-16 02:50:07
【问题描述】:
在 Web 应用程序中处理富文本的最佳做法是什么?我不想让自己容易受到脚本攻击。数据是否应该被编码进入数据库,然后在显示给用户时进行解码?关于处理诸如删除脚本标签或编码输入标记之类的富文本编辑器的任何建议?
【问题讨论】:
-
您没有解决我问题的编码/解码或文本编辑器部分。
标签: asp.net-mvc richtext
在 Web 应用程序中处理富文本的最佳做法是什么?我不想让自己容易受到脚本攻击。数据是否应该被编码进入数据库,然后在显示给用户时进行解码?关于处理诸如删除脚本标签或编码输入标记之类的富文本编辑器的任何建议?
【问题讨论】:
标签: asp.net-mvc richtext
您应该选择一个已知标签和属性的白名单,将用户输入解析为 XML,然后删除不在白名单中的每个标签或属性。
编辑:请注意,如果您允许超链接或图像,则必须验证 src 和 href 标记。我建议使用System.Uri 解析它,将方案限制为http,也许还可以使用您网站的域(取决于您希望您的用户能够做什么)。
以前做过类似的事情;谷歌他们。
编辑:例如,见this question
2nd 编辑:
您不应该在将数据放入数据库之前对其进行编码。只要您使用参数(如果不使用,则真的应该使用),数据库将完全不受您放入其中的任何内容的影响。
如果您的输入清理是安全的(见上文),那么如果您对其进行编码并在途中对其进行解码,则不会有任何区别,如果清理不安全,则对其进行编码将无济于事。
但是,通过标准 XML 解析器运行它可能是个好主意,拒绝任何不解析的输入,并使用解析器中格式化的 XML(如上所述)
3rd 编辑:
市面上有很多富文本编辑器;对于 MVC,我想我会推荐 FCKEditor。它会为您转义输入,但您必须不要完全依赖它,因为攻击者可以禁用 JavaScript 或伪造他自己的 HTTP 请求。 (您仍然需要验证服务器上的 HTML)。有许多用于 Web 表单的富编辑器(我假设它们进行服务器端验证); MVC 还没有(还没有)
【讨论】:
最好的选择是对发送给用户的数据进行编码,而不是在数据库中对其进行编码。据我所知,asp.net 通过验证输入来防止脚本攻击。
【讨论】: