删除服务器端验证并进行完整的客户端验证?

时间:2013-10-03 03:11:17

标签: javascript validation optimization client-side server-side

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

示例:

  • 在客户端,有一个'年龄'输入textfieldJavaScript将不允许提交表单,除非它在该范围内)

  • 在服务器端,不再需要验证'年龄

    //而不是再次验证年龄

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

    if(age> = 0){/ * codes * /}

我们只能继续

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

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

要在Web浏览器中容纳已禁用的JavaScripts,我们需要先检查。如果启用了JavaScript,请继续执行该应用程序,否则将阻止该应用程序。 (就像Facebook一样)

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

3 个答案:

答案 0 :(得分:2)

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

简而言之,取决于

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

答案 1 :(得分:0)

如果担心安全性/数据完整性,我会建议不要这样做。虽然这足以阻止Joe Smith输入不需要的数据,但您可以让系统对那些了解网络运行方式的人进行严格的数据操作。

假设您有一个类似于StackOverflow的投票系统,无论何时用户投票,都会进行AJAX调用。虽然JS验证可能会阻止某人使用显示的HTML在同一个问题或答案上投票多次,但它不会阻止用户进入他们的浏览器控制台并手动提交POST或GET请求来绕过JS验证。在你知道它之前,你会看到Lloyd Banks在回答几个问题后获得10万的声誉

答案 2 :(得分:0)

我相信无处不在的验证

我喜欢对客户端进行验证:

  • 填充了必填字段
  • 最小尺寸字段(如zip)
  • 正确位置的正确字符类型的正则表达式(例如社会安全号码,新密码等)
  • 特权执行(用户只能查看并执行他们应该允许的角色)

服务器端验证:

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

用户输入是敌人!用户会找到一种方法来自愿或不自愿地破坏您的网站。事情会陷入困境。 所以我强烈支持双重和三重检查。

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

总体而言,我认为富客户端验证的原因是:

  • 检查数据完整性的另一个级别(以及服务器端)
  • 指导用户;智能客户端验证可以帮助用户更快地做出更有效的答案
  • 更好的体验;如果用户不必等待环回服务器并返回客户端以查看其错误,那么他们的用户体验应该会更好。