3

我有一个冗长的表单,它大量使用客户端验证(用 jQuery 编写)。为了防止禁用 JavaScript 的用户提交表单,我添加了一个隐藏字段,该字段由 jQuery 填充“javascript_enabled”值。如果浏览器中禁用了 JS,则该字段留空并且不会提交表单。

问题是 - 这是否足够,我应该感到安全,还是我必须为每个字段都包含服务器端验证?

4

4 回答 4

8

不,客户端验证只是为了让用户感到舒适,而不是为了保护您的服务器。

用户可以轻松更改所有客户端操作。

为了保护您的服务器,您必须添加服务器端验证。

于 2012-05-05T09:56:11.430 回答
6

到什么程度?没有任何。您根本不应该依赖客户端验证。客户端验证纯粹是为了 UX 目的。

真正的验证总是在服务器上完成。

于 2012-05-05T09:56:19.647 回答
4

以上所有答案都是有效的,我只想补充几点。

客户端

  • 客户端验证可用于向用户提供即时反馈,而无需向服务器发出额外请求(流量较低)。

  • 可以轻松绕过客户端验证。(禁用 JavaScript、自定义 HTTP 请求、使用 CURL 等访问)

服务器端

  • 无法绕过(除非您留下了可利用的代码)

  • 良好的服务器端验证可以防止 XSS 和 SQL 注入等潜在威胁。(可能导致获取其他用户数据,或破坏您的数据库)

我如何相信这会改变

我期待 WebSocket 协议的进一步开发并使其得到更广泛的使用。WebSockets 允许双向(全双工)连接,这意味着从服务器端进行验证将非常有效,例如每个在输入字段中输入键的时间。希望这种方法将取消客户端验证!

于 2012-05-05T10:17:46.000 回答
0

服务器端验证是必须的,客户端验证是在没有往返服务器的开销的情况下尽可能多地进行。

于 2012-05-05T10:01:58.287 回答