ASP.NET中的脚本利用-正在设置validateRequest=";“真的”;好建议?
我正在阅读,其中一条建议是:ASP.NET中的脚本利用-正在设置validateRequest=";“真的”;好建议?,asp.net,security,xss,antixsslibrary,Asp.net,Security,Xss,Antixsslibrary,我正在阅读,其中一条建议是:(重点是我的;建议是“防止脚本攻击”一节中的第3条 “在网页中) 如果希望应用程序接受某些HTML(例如,用户提供的一些格式说明),则应在将HTML提交到服务器之前在客户端对其进行编码。有关更多信息,请参见如何:通过对字符串应用HTML编码来防止Web应用程序中的脚本攻击 这不是很糟糕的建议吗?我的意思是,开发人员可以通过curl或类似的方式发送HTML,然后将HTML以未编码的方式发送到服务器,这不好(?) 我是在这里遗漏了什么还是误读了这句话?我认为这个建议不好
(重点是我的;建议是“防止脚本攻击”一节中的第3条 “在网页中) 如果希望应用程序接受某些HTML(例如,用户提供的一些格式说明),则应在将HTML提交到服务器之前在客户端对其进行编码。有关更多信息,请参见如何:通过对字符串应用HTML编码来防止Web应用程序中的脚本攻击 这不是很糟糕的建议吗?我的意思是,开发人员可以通过curl或类似的方式发送HTML,然后将HTML以未编码的方式发送到服务器,这不好(?)
我是在这里遗漏了什么还是误读了这句话?我认为这个建议不好 根据我的经验,我完全同意你的想法,并用以下建议取代此建议:
- 所有输入必须在到达时首先在服务器端进行检查
- 所有可能包含“活动内容”(如HTML、JavaScript…)的输入必须在到达时转义,并且在完全清除之前,不得发送到任何客户端
您还默认启用了请求验证,对吗?显然,就微软而言,保护内容的重点是服务器。微软的判决没有错,但另一方面,判决远未完成,而且判决是危险的。 由于默认情况下validateRequest==true,您确实应该在客户机中编码特殊的HTML字符,以便它们首先进入服务器并绕过validateRequest 但是-他们应该强调,这肯定不是服务器端筛选和验证的替代品
具体来说,如果您必须接受HTML,最强烈的建议是使用白名单而不是黑名单(即允许非常特定的HTML标记,并消除所有其他标记)。强烈建议使用进行强用户输入过滤。这比你自己“重新发明轮子”要好得多。我认为这篇文章的作者说错了。如果您转到链接的网页,它会在将数据发送回客户端之前对其进行编码,而不是相反。我认为这只是作者的编辑错误,他想说的恰恰相反。。在返回给客户之前对其进行编码。请向所有回答者查看这篇文章,谢谢,是的,链接页面确实进一步解释了问题,但我质疑的是声明本身。所有答案都很好,因为它更清楚地解释了问题,所以将这篇文章标记为已接受。但我不知道,Ofer,你为什么说“微软在他们的句子中没有错”——这句话显然是错的——也许我也应该把你应该编码的单词加粗?本指南适用于应用程序应接受合法HTML输入的情况,例如为用户提供富文本编辑(例如编辑博客文章)时。在这种情况下,从技术上讲,您确实应该在客户端对客户端输入进行编码,否则您将无法通过.Net的ValidateRequest障碍。这就是说,它肯定不会取代强大的服务器端验证。这就是本文中MS的错误——他们应该在这句话之后立即强调,服务器验证无论如何都必须进行。