您在哪里将用户输入验证放在Web表单应用程序中?
查看:JavaScript客户端
控制器:服务器端语言(C#...)
型号:数据库(存储过程或依赖项)
我认为每个级别都需要验证:
用户输入了一个合理的值吗?
是日期实际日期,是数字实际数字...
再次执行1.中的所有检查以及检查恶意攻击(IE XSS或SQL注入)
1中完成的检查主要是为了避免用户出错时服务器往返.
由于它们是在javascript中在客户端完成的,因此您不能相信它们已经运行.再次验证这些值将阻止一些恶意攻击.
是否满足依赖性(即,用户是否对有效问题添加了注释)
一个好的界面使这些很难被违反.如果有人抓到了什么东西,那就出错了.
[受此回应的启发]
我检查所有层,但我想注意我使用的验证技巧.
我在数据库层验证,对模型的适当约束将提供自动数据完整性验证.
这是一种似乎在大多数网络程序员身上丢失的艺术.
在模型中进行验证,可选择在UI中自动化例程,从模型中获取提示并改善用户体验.
通过自动化例程,我的意思是在用户界面中不应该有任何每个模型的验证代码.如果你有一个验证方法库,比如RoR(它有像validates_presence_of:username这样的方法),那么控制器或视图应该能够读取这些并应用等效的javascript(或任何方便的)方法.
这意味着您必须在ui中复制完整的验证库,或者至少在使用预先存在的验证库时提供映射.但是一旦完成,您将不必在模型外部编写任何验证逻辑.