我了解用户可以禁用 Javascript。
我正在开发一个 Web 应用程序,每当用户提交表单(以及客户端验证)时,都会使用 javascript 修改隐藏字段,并在服务器端进行检查以查看用户是否禁用了 js。如果 js 被禁用,则会通知用户启用 javascript。
- 我是否需要在服务器端再次验证输入?(如果是,那为什么?)
- 在这种情况下,有没有办法绕过客户端验证?
- 同样,在基于 ajax 的登录的情况下,我们是否需要在服务器端再次检查用户凭据?
我了解用户可以禁用 Javascript。
我正在开发一个 Web 应用程序,每当用户提交表单(以及客户端验证)时,都会使用 javascript 修改隐藏字段,并在服务器端进行检查以查看用户是否禁用了 js。如果 js 被禁用,则会通知用户启用 javascript。
您永远不应该信任任何客户端输入并始终在服务器上进行验证。
客户端验证只是为了方便用户。
我是否需要在服务器端再次验证输入?
是的。总是。不要偷懒。甚至无法保证请求来自浏览器,更不用说启用了 JavaScript 的浏览器了。浏览器并不是发出 HTTP 请求的唯一方式,而且 HTTP 服务器——根据定义——服务于 HTTP 客户端,而不仅仅是浏览器。验证的存在是为了保护您、您的系统、您的宝贵数据以及您系统的其他用户。依赖客户端验证假定合作的、非恶意的客户端,但验证的全部目的是提供对不合作或恶意客户端的保护。
在这种情况下,有没有办法绕过客户端验证?
当然。请求可以“手动”构造,使服务器误以为隐藏字段是用 JavaScript 操作的,从而使服务器误以为 JS 已启用。隐藏字段对安全没有任何作用;他们是微不足道的操纵。
您需要在服务器端再次验证输入。不要相信来自客户的任何输入。因为他们可以在没有您的表单的情况下发布任何数据。
客户端验证仅适用于 UX。