端与服务器

哪个更适合做客户端或服务器端验证?

在我们的情况下我们正在使用

  • jQuery和MVC。
  • JSON数据在View和Controller之间传递。
  • 我做的许多验证是在用户输入数据时验证数据。 例如,我使用keypress事件来防止文本框中的字母,设置最大字符数以及数字在某个范围内。

    我想更好的问题是,在客户端做服务器端验证是否有任何好处?


    真棒回答大家。 我们拥有的网站受密码保护,并且适用于小型用户群(<50)。 如果他们没有运行JavaScript,我们会发送忍者。 但是,如果我们为每个人设计一个网站,我会同意在双方进行验证。


    正如其他人所说,你应该两个都做。 原因如下:

    客户端

    您首先要验证客户端的输入,因为您可以向普通用户提供更好的反馈 。 例如,如果他们输入了无效的电子邮件地址并转到下一个字段,则可以立即显示错误消息。 这样用户可以提交表单之前纠正每个字段。

    如果您只在服务器上验证,他们必须提交表单,获取错误消息,并尝试追查问题。

    (这种痛苦可以通过让服务器重新渲染表单并填充用户的原始输入来缓解,但客户端验证仍然更快。)

    服务器端

    您希望在服务器端进行验证,因为您可以防范恶意用户 ,他们可以轻松绕过JavaScript并向服务器提交危险输入。

    相信你的用户界面是非常危险的。 他们不仅可以滥用你的用户界面,而且他们可能根本不会使用你的用户界面,甚至是浏览器 。 如果用户手动编辑URL或者运行自己的Javascript,或者用其他工具调整HTTP请求,该怎么办? 例如,如果他们发送来自curl或脚本的自定义HTTP请求,会怎么样?

    (这不是理论上的;例如,我曾在一个旅行搜索引擎上工作,通过发送POST请求,将用户的搜索重新提交给许多航空公司,公交公司等,就像用户填写了每家公司的搜索表单一样,然后收集并分类所有的结果,那些公司的JS形式从来没有被执行过,而且他们在返回的HTML中提供了错误信息对我们来说至关重要,当然,API本来是不错的,但这是我们必须做的。

    不允许这样做,不仅从安全角度来看是天真的,而且也是非标准的:客户端应该被允许以他们希望的任何方式发送HTTP,并且您应该正确响应。 这包括验证。

    服务器端验证对兼容性也很重要 - 即使用户使用浏览器,也不是所有的用户都会启用JavaScript。

    附录 - 2016年12月

    有些验证在服务器端应用程序代码中甚至无法正确完成,而且在客户端代码中完全不可能 ,因为它们取决于数据库的当前状态。 例如,“没有其他人注册了该用户名”,或“您评论的博客文章仍然存在”,或“没有现有的预订与您请求的日期重叠”,或“您的帐户余额仍然足以支付该购买“。 只有数据库可以可靠地验证依赖于相关数据的数据。 开发人员经常搞砸这个,但PostgreSQL提供了一些很好的解决方案。


    是的,客户端验证可以完全绕过,总是。 您需要同时执行这两个操作,客户端提供更好的用户体验,而服务器端确保您获得的输入实际上经过验证,而不仅仅是客户端验证的。


    我只是想重复一遍,因为这很重要:

    始终在服务器上进行验证

    并为用户响应添加JavaScript。

    链接地址: http://www.djcxy.com/p/86159.html

    上一篇: side vs. server

    下一篇: ggplot2 secondary axis strange output