asp.net - 为什么需要执行服务器端验证?

标签 asp.net security validation

感谢所有评论或发布答案的人!为了完整起见,我保留了原来的问题并在下面进行了更新。

[2011 年 2 月 16 日 - 更新 2] 正如一些人指出的那样 - 我的问题应该是:给定一个标准的 asp.net 4 表单,如果我没有任何服务器端验证,什么类型的我容易受到恶意攻击吗?

这是我对这个问题的看法。

  • 如果数据不敏感(页面上的评论) - 从 ASP.NET 安全角度来看,遵循标准最佳实践(SqlParameters、启用请求验证等)将保护您免受恶意攻击.
  • 对于敏感数据/应用程序 - 由您决定哪种类型的服务器端验证适合您的应用程序。您需要考虑端到端解决方案(网络服务、其他系统等)。您可以查看下面的一些建议 - 白名单验证等。
  • 如果您使用 ajax(xhr 请求)来发布用户输入,您需要在服务器上的代码中重现来自其他项目符号的保​​护。同样,下面有很多解决方案 - 例如确保数据不包含任何 html/代码等。(旁注:.net 框架 requestValidationMode="4.0"确实在这方面提供了一些保护 - 但我可以'不要说它是多么完整的解决方案)

请随时继续发表评论...如果以上任何内容不正确,请告诉我。谢谢!

<小时/>

[2011 年 2 月 3 日 - 更新 1] 我要感谢大家的回答!也许我应该问相反的问题:

假设一个简单的 asp.net 4.0 Web 表单(启用了请求验证的表单 View + 数据源),它允许登录用户向公共(public)页面发布评论(评论存储在 sql server 数据库中表)。我应该对服务器端的新“评论”执行什么类型的数据验证或清理?

<小时/>

[2011 年 1 月 19 日 - 原始问题] 我们的 asp.net 4 网站有一些表单,用户可以在其中提交数据,并且我们在客户端使用 jquery 验证。用户必须使用有效帐户登录才能访问这些表单。

我知道我们的客户端验证规则很容易被绕过,并且客户端可以在没有必填字段的情况下发布数据等。这与我不太关心 - 用户必须登录,而且我不太考虑我们的数据我也不会说我们的任何验证都是“敏感的”。输入数据使用 SqlParameters 写入数据库(以防御 sql 注入(inject)),并且我们依靠 ASP.NET 请求验证来防御潜在危险的 html 输入。

真的值得我们花时间去重写服务器上的各种jquery验证规则吗?具体来说,恶意用户如何危害我们的服务器,或者我们可能会遭受哪些特定攻击?

我很抱歉,因为这个问题似乎已在本网站上讨论过几次 - 但我尚未找到引用不执行服务器端验证的特定风险或问题的答案。提前致谢

最佳答案

假设情况:

假设您有一个邮政编码字段。在客户端,您验证它必须采用“00000”或“00000-0000”模式。由于您允许使用连字符,因此您决定将该字段作为 varchar 存储在数据库中。

因此,一些邪恶的用户出现并决定绕过所有客户端验证并提交格式不正确的内容并使其通过请求验证。

好吧,没什么大不了的...,无论如何,您都会在稍后将其显示给用户之前对其进行编码。

但是您还用该邮政编码做什么?您是否将其提交给网络服务进行某种查找?您是否将其上传到 GPS 设备?将来它会被其他东西解释吗?您的邮政编码字段现在包含一些 JSON 或其他奇怪的内容吗?

或者类似这样的:http://www.businessinsider.com/livingsocial-server-flaw-2011-1

关于asp.net - 为什么需要执行服务器端验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4739668/

相关文章:

asp.net - Heroku Push 被拒绝,无法编译 ASP.NET Core 应用程序

iphone - 如何为移动应用程序设计安全的 API/身份验证以访问服务?

java - HTTPS POST 请求(java)到网站(php),如何处理来自它的数据?

java - 如何通过验证在 JAXB 中进行部分解析 xml?

asp.net-mvc - 如何使用Asp.net MVC来验证列表属性的项目数最少(计数= N)?

c# - LINQ:获取具有给定属性最大值的行

c# - 发送文件后关闭 ModelPopup

php - 使用 AMFPHP 框架在 ActionScript 3 中通过 PHP 安全连接 MySQL

validation - Play 2.0 表单的自定义验证(scala)

c# - 处理 session 变量超时