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

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

jQuery和MVC。 JSON数据在视图和控制器之间传递。

我所做的很多验证都是在用户输入数据时进行验证。 例如,我使用按键事件来防止文本框中出现字母,设置一个最大字符数,并在一个范围内设置一个数字。

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


很棒的回答每个人。我们拥有的网站是密码保护的,用户基数小(<50)。如果他们没有运行JavaScript,我们将发送忍者。但如果我们为每个人设计一个网站,我同意对双方进行验证。


当前回答

必须始终在服务器上进行验证。

在客户端上进行验证对用户来说也很好,但这是完全不安全的。

其他回答

如果您正在进行轻量级验证,最好在客户端上进行。它将节省网络流量,这将帮助您的服务器更好地运行。如果验证很复杂,需要从数据库中提取数据或密码之类的东西,那么最好在可以安全地检查数据的服务器上进行验证。

客户端数据验证对于更好的用户体验很有用:例如,如果用户输入了错误的电子邮件地址,就不应该等到远程服务器处理了他的请求后才知道他输入了错误。

然而,由于攻击者可以绕过客户端验证(甚至可能根本不使用浏览器),所以服务器端验证是必需的,并且必须是保护后端免受恶意用户攻击的真正大门。

您可以进行服务器端验证,并将每个字段的验证结果发送回一个JSON对象,将客户端Javascript保持在最低限度(只显示结果),并且仍然具有用户友好的体验,而无需在客户端和服务器上重复。

做服务器端验证而不是客户端验证的好处是客户端验证可以被绕过/操纵:

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

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

是的,总是可以完全绕过客户端验证。您需要做到这两点:客户端提供更好的用户体验,服务器端确保您得到的输入是实际验证的,而不仅仅是客户端假定的验证。