验证,您通常在Web应用程序中执行哪些检查?

时间:2009-03-17 23:57:38

标签: asp.net-mvc validation

我正在构建一个公开的网络应用。因此,我将尽可能详尽地验证每个字段。我的意思是,如果某人输入的内容无效,他们就会知道完全它是什么(明确了他们需要修复的内容)。

我跟随了斯科特格思里在NerdDinner eBook中的例子。我喜欢在核心类文件中进行所有验证的想法(作为部分类)。

我正在执行的验证是:

  • 最小值 - 确保字符串至少是一定长度
  • 最大值 - 确保字符串的最大长度(基于数据库中的字段属性)
  • int检查 - 确保整数字段可以正确解析为int
  • 文件扩展名 - 确保上传的文件扩展名类型正确

我的问题是,您在网络应用中进行的典型验证检查是什么?也许我完全忽视了某些内容。 ;)

提前致谢!

4 个答案:

答案 0 :(得分:3)

您应该尝试尽可能多地使用现有框架进行验证。编写全面的验证库是一项艰巨而耗时的工作。这是最好留给致力于开发它的团队的事情之一,例如jQuery validation插件和类似的项目。已经有很多非常好的validator libraries可以为您节省大量的时间和精力。

您可能会发现有关Codeplex的MVC validator toolkit项目很有帮助。 CodeProject has a tutorial on it如果您想了解更多内容。您还可以查看xVal,作为提及的评论者之一。

如果您有特殊原因需要在内部编写验证,或者您不相信我上面所说的内容,那么我认为有用的是:

  • 显然是必需的字段验证。您可能已经通过检查字段中的最小长度来实现此目的。
  • 通用正则表达式验证。确保您有一些方法可以执行此类验证。如果某个特定字段需要在您网站中的其他位置找不到唯一形式的验证,这将有助于您。确保您的API足够灵活,可以添加基于特定正则表达式的验证。
  • 电子邮件。你需要这个。
  • 电话号码。这些可能很难,因为它们可以进入所有形式(所有数字,有时带有字母字符,有时是符合不同格式的国际数字)
  • 日期&时间也很重要,但是你应该考虑使用某种日期/时间选择器来减少错误的可能性,因为不允许用户键入值。
  • 确保包含非文本框相关字段的验证功能,例如下拉列表,单选按钮,复选框等。过去我只是忘记了这些,但它们确实变得很重要。
  • 匹配字段。例如,在确认密码时,两个字段都应匹配。这不会在一个页面中使用。考虑密码重置,管理页面,用户控制面板等。
  • 虽然有点复杂,但您可能还希望包含序列验证。例如,您网站上的某些选项可能要求您先选择其他选项。另一个例子是,如果您首先选择其他选项组合,则只能选择某些选项。这可能无法包含在通用API中,但需要考虑的事情。

答案 1 :(得分:1)

您需要检查SQL injectionXSSCSRF。您可以将这些tools用于Firefox来帮助您测试这些内容。然后还有一些事情,比如确保用户名不等于密码,登录限制等。验证你的CSS和XHTML也不错,尽管我认为这不是你的意思。

答案 2 :(得分:1)

除了别人提到的内容之外,别忘了验证彼此依赖的项目。也就是说,输入值的一致性。例如,如果用户输入最大值和最小值,则不要仅根据其合法的最大值和最小值单独检查这两个值,而是相互检查它们以确保输入的值在逻辑上一致。

对于主机名,您可能需要验证DNS是否返回IP地址。如果没有,请让用户知道,但不一定拒绝主机名。也许用户正在预先配置尚不存在的东西。这取决于具体的应用。

也就是说,除了语法有效性之外,您还可以检查输入的值是否有意义并且彼此一致。

如果你全力以赴,你可以做的另一件事是只允许在数字字段中输入数字,只允许在信用卡或电话号码字段中输入数字和“ - ”,依此类推。

始终,始终允许用户以最熟悉的格式输入输入,即使您以后必须删除无关的数据。例如,即使您稍后删除了“ - ”字符,让用户(但不要求用户)输入电话号码是1-800-555-1212。​​

答案 3 :(得分:0)

不确定这与asp.net-mvc有什么关系,但是......

我总是尽量避免过度验证(显然你需要做一些简单的理智,以确保没有db错误)。这是一个根据您的业务规则进行现场决策的字段。某些字段需要具有严格的验证规则,例如信用卡号。但只需要考虑验证如何为用户提供服务。很少需要正则表达式来匹配所有可能的电子邮件地址 - 当网站不允许在您的电子邮件中添加+标志时,这真的很烦人。在大多数情况下,如果您让人们按照他们想要的方式输入电话号码,您的应用就可以了。当你准备在场地上放置必要的规则时,总是先猜测自己。

我推荐使用entlib验证应用程序块来实现易于使用和扩展的框架。