Request Validation是一种强大的机制,可以防止通过请求向服务器注入恶意代码。这是在服务器端完成的,因此无论是否有任何客户端验证已经完成,可以确定是否会发生异常,然后会自动抛出异常。
我的问题: 虽然我们有"请求验证"在手,还有必要消毒请求吗?
我正在使用Asp.net MVC 5.0
PS: 我只是在网络(不是数据库或其他)的背景下谈论它及其潜在的漏洞(例如XSS)。
答案 0 :(得分:1)
是的!如果没有正确处理,ASP.NET眼中有很多完全有效的输入可能会导致应用程序出现问题。
例如,如果有人在请求中传递了一些数据,并且您没有正确地在数据层中对查询进行参数化,则输入:
apt-get install dos2unix
find . -name "*.php" -exec dos2unix {} \;
可能导致此查询:
x'; DROP TABLE users; --
哦,不!您已丢失了“用户”表格!
无论请求验证如何,您都应始终将用户输入视为敌对。 This演示了一些请求验证无法保存皮肤的方案。
呈现用户提供的输入时的HTML编码非常重要...切勿使用SELECT FieldList
FROM Users
WHERE Email = 'x'; DROP TABLE Users; --
呈现任何不受信任的输入,并注意HtmlHelpers正确编码来自用户的任何内容。
深度防御很重要。将请求验证视为该过程的一部分。
答案 1 :(得分:0)