2

是否建议在客户端进行所有必要的输入验证?我想优化服务器的处理(意味着更少的双重验证,以便程序员可能只关注业务逻辑)。

例子:

  • 在客户端,有一个“年龄”输入textfieldJavaScript除非在范围内,否则不允许提交表单)

  • 在服务器端,不再验证“年龄”

    // 而不是再次验证年龄

    int age = Integer.parseInt(request.getParameter("age")); // 检查年龄是否有效

    if(age >= 0 ) { /* 代码 * / }

我们只能继续

int age = Integer.parseInt(request.getParameter("age"));

因为我们非常确定它是有效的。

为了适应 Web 浏览器中的禁用JavaScripts,我们需要先检查。如果JavaScript启用,则继续应用程序,否则阻止应用程序。(就像脸书一样)

我的理论/概念可以接受吗?

4

3 回答 3

2

如果您需要强制执行某些输入模式,则不能依赖来自客户端的数据。人们可以禁用 JavaScript,或者完全绕过您的验证并发送他们想要的任何数据。但是,大多数普通用户不会有这个问题,而且数据无论如何都是来自客户端。

简而言之,这取决于.

对于我的大多数应用程序,我都有客户端验证,并且只担心服务器端可能引发错误条件的某些事情。例如,如果我有一个向某人发送电子邮件的表单,我将使用 JavaScript 来检查有效to:的电子邮件地址,并提醒用户。在服务器端,如果该电子邮件地址无效或不存在,我将简单地抛出一个错误编写代码,让用户清楚地知道出了什么问题。对于消息正文,我将验证客户端是否有消息正文,但服务器端我并不关心。同样,你做什么取决于你的需要。

于 2013-10-03T03:14:54.107 回答
0

如果安全/数据完整性是一个问题,我建议不要这样做。虽然这足以阻止 Joe Smith 输入不需要的数据,但您会让系统对了解 Web 工作原理的人进行严重的数据操作开放。

假设您有一个像 StackOverflow 这样的投票系统,只要用户投票,就会进行 AJAX 调用。虽然 JS 验证可能会阻止一个人使用显示的 HTML 对同一个问题或答案进行多次投票,但它不会阻止用户进入其浏览器的控制台并手动提交 POST 或 GET 请求以绕过 JS 验证。在不知不觉中,您会在回答几个问题后看到拥有 100k 声誉的 Lloyd Banks

于 2013-10-03T03:18:04.340 回答
0

我相信无处不在的验证

我喜欢进行客户端验证:

  • 填充的必填字段
  • 最小大小字段(如 zip)
  • 正则表达式在适当的位置(例如社会安全号码、新密码等)中的适当字符类型
  • 特权强制(用户只能看到和做他们的角色应该被允许做的事情)

服务器端验证:

  • 所有客户端要求
  • 实体关联(子父关系是合法的)
  • 更改或请求是角色授权的

用户入口是敌人!用户会找到一种方法来随意或不情愿地破坏您的网站。事情会从裂缝中消失。所以我强烈支持双重和三重检查。

如果不是因为我担心这种想法会使我的异常更加突出,我会相信客户端验证可以节省服务器处理。

总的来说,我重视富客户端验证的原因是:

  • 多一层检查数据完整性(以及服务器端)
  • 引导用户;智能客户端验证使帮助用户更快地做出更有效的答案
  • 更好的体验;如果用户不必等待循环返回服务器并返回客户端来查看错误,那么他们的用户体验应该会更好。
于 2013-10-03T03:35:44.600 回答