【发布时间】:2013-10-03 03:11:16
【问题描述】:
是否建议在客户端进行所有必要的输入验证?我想优化服务器的处理(意味着更少的双重验证,以便程序员可能只关注业务逻辑)。
例子:
在客户端,有一个“年龄”输入
textfield(JavaScript不允许提交表单,除非它在范围内)-
在服务器端,不再验证“年龄”
// 而不是再次验证年龄
int age = Integer.parseInt(request.getParameter("age")); // 检查年龄是否有效
if(age >= 0 ) { /* 代码 * / }
我们只能继续
int age = Integer.parseInt(request.getParameter("age"));
因为我们非常确定它是有效的。
为了适应 Web 浏览器中禁用的JavaScripts,我们需要先进行检查。如果启用了JavaScript,则继续应用程序,否则阻止应用程序。 (就像脸书一样)
我的理论/概念可以接受吗?
【问题讨论】:
-
“因为我们非常确定它是有效的。” -- 你永远无法确定,你总是必须在服务器上验证。
-
“我想优化服务器的处理”——你真正的意思是“我不想做同样的工作两次”。我知道那种感觉,我去过那里。然而,对于重要和安全敏感的数据,仍然没有办法绕过服务器端验证。客户端的任何数据都可以伪造。
-
使用客户端验证的主要优势之一是它“避免了页面回发”。这在 AJAX 不太流行的旧时代非常重要。即使使用 AJAX,客户端验证也能提供更快的响应和更好的用户体验。
标签: javascript validation optimization client-side server-side