JavaScript:客户端与服务器端验证

JavaScript:客户端与服务器端验证,javascript,security,validation,Javascript,Security,Validation,客户端验证和服务器端验证哪个更好 在我们的情况下,我们正在使用 jQuery和MVC 要在视图和控制器之间传递的JSON数据 我做的很多验证都是在用户输入数据时验证数据。 例如,我使用按键事件来防止文本框中出现字母,设置最大字符数,并且数字在一定范围内 我想更好的问题是,服务器端验证比客户端验证有什么好处吗 每个人的回答都很棒。该网站,我们有密码保护,为一个小的用户群(是的,客户端验证总是可以完全绕过的。您需要同时做这两件事,客户端提供更好的用户体验,服务器端确保您得到的输入是实际验证的,

客户端验证和服务器端验证哪个更好

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

  • jQuery和MVC
  • 要在视图和控制器之间传递的JSON数据
我做的很多验证都是在用户输入数据时验证数据。 例如,我使用
按键
事件来防止文本框中出现字母,设置最大字符数,并且数字在一定范围内

我想更好的问题是,服务器端验证比客户端验证有什么好处吗



每个人的回答都很棒。该网站,我们有密码保护,为一个小的用户群(是的,客户端验证总是可以完全绕过的。您需要同时做这两件事,客户端提供更好的用户体验,服务器端确保您得到的输入是实际验证的,而不仅仅是假定由客户端验证的。

如果您正在进行轻度验证,最好在客户端进行。这样可以节省成本网络流量,这将帮助您的服务器更好地执行。如果它使验证变得复杂,包括从数据库或密码之类的东西提取数据,那么最好在可以安全检查数据的服务器上进行验证。

与客户端验证相比,服务器端验证的好处是客户端验证可以绕过/操纵on:

  • 最终用户可以关闭javascript
  • 数据可以通过一个定制的应用程序直接发送到你的服务器,而这个应用程序甚至不使用你的站点
  • 页面上的Javascript错误(由许多事情引起)可能会导致部分(但不是全部)验证运行

简而言之,始终验证服务器端,然后将客户端验证作为附加的“额外”来增强最终用户体验。

<强>您必须始终在服务器上验证。< /强>


对用户来说,在客户端进行验证也很好,但绝对不安全。

我只想重复一下,因为这非常重要:

始终在服务器上验证


并添加JavaScript以实现用户响应。

正如其他人所说,您应该同时执行这两项操作。原因如下:

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

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

(这种痛苦可以通过让服务器在填写用户原始输入的情况下重新呈现表单来缓解,但客户端验证速度更快。)

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

信任你的UI是非常危险的。他们不仅可能滥用你的UI,而且可能根本不使用你的UI,甚至不使用浏览器。如果用户手动编辑URL,或运行自己的Javascript,或使用其他工具调整HTTP请求,会怎么样?如果他们从
curl
或scri发送自定义HTTP请求会怎么样比如说pt

(这不是理论上的;例如,我在一个旅游搜索引擎上工作,通过发送
POST
请求,将用户的搜索结果重新提交给许多合作航空公司、公交公司等,就像用户填写了每家公司的搜索表一样,然后收集并排序所有结果。这些公司的JS表从未执行过,这对我们的工作至关重要。)我们知道他们在返回的HTML中提供了错误消息。当然,API会很好,但这是我们必须做的。)

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

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

附录-2016年12月
有些验证在服务器端应用程序代码中甚至无法正确执行,而在客户端代码中则完全不可能执行,因为它们取决于数据库的当前状态。例如,“没有其他人注册了该用户名”,或“您评论的博客文章仍然存在”,或“没有任何现有预订与您要求的日期重叠”,或者“您的帐户余额仍足以支付该笔购买。”只有数据库能够可靠地验证依赖于相关数据的数据。开发者,但是。

好吧,我仍然找到一些回答的空间

除了Rob和Nathan的回答之外,我还要补充一点,即客户端验证很重要。当您在webforms上应用验证时,必须遵循以下准则:

客户端
  • 必须使用客户端验证,以过滤来自您网站上真正用户的真正请求
  • 客户端验证应用于减少服务器端处理过程中可能出现的错误
  • 客户端验证应用于最小化服务器端往返,以便节省带宽和每个用户的请求
  • 服务器端
  • 你不应该假设在客户端成功完成的验证是100%完美的。即使它服务的用户少于50个。你永远不知道你的用户/雇员中的哪一个变成了“邪恶”并在知道你没有适当验证的情况下进行一些有害的活动
  • 即使它在validati方面是完美的