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