我有一个冗长的表单,它大量使用客户端验证(用 jQuery 编写)。为了防止禁用 JavaScript 的用户提交表单,我添加了一个隐藏字段,该字段由 jQuery 填充“javascript_enabled”值。如果浏览器中禁用了 JS,则该字段留空并且不会提交表单。
问题是 - 这是否足够,我应该感到安全,还是我必须为每个字段都包含服务器端验证?
我有一个冗长的表单,它大量使用客户端验证(用 jQuery 编写)。为了防止禁用 JavaScript 的用户提交表单,我添加了一个隐藏字段,该字段由 jQuery 填充“javascript_enabled”值。如果浏览器中禁用了 JS,则该字段留空并且不会提交表单。
问题是 - 这是否足够,我应该感到安全,还是我必须为每个字段都包含服务器端验证?
不,客户端验证只是为了让用户感到舒适,而不是为了保护您的服务器。
用户可以轻松更改所有客户端操作。
为了保护您的服务器,您必须添加服务器端验证。
到什么程度?没有任何。您根本不应该依赖客户端验证。客户端验证纯粹是为了 UX 目的。
真正的验证总是在服务器上完成。
以上所有答案都是有效的,我只想补充几点。
客户端验证可用于向用户提供即时反馈,而无需向服务器发出额外请求(流量较低)。
可以轻松绕过客户端验证。(禁用 JavaScript、自定义 HTTP 请求、使用 CURL 等访问)
无法绕过(除非您留下了可利用的代码)
良好的服务器端验证可以防止 XSS 和 SQL 注入等潜在威胁。(可能导致获取其他用户数据,或破坏您的数据库)
我期待 WebSocket 协议的进一步开发并使其得到更广泛的使用。WebSockets 允许双向(全双工)连接,这意味着从服务器端进行验证将非常有效,例如每个在输入字段中输入键的时间。希望这种方法将取消客户端验证!
服务器端验证是必须的,客户端验证是在没有往返服务器的开销的情况下尽可能多地进行。