【发布时间】:2015-07-11 22:08:53
【问题描述】:
我完全理解应该使用 JavaScript 来增强用户体验,但是我有时会使用它来验证输入,例如检查密码文本框是否超过 5 个字符或检查用户名文本框中输入的用户名是否已经存在。可以想象,如果密码少于 5 个字符或者用户名已经存在,注册按钮就会被禁用。
但是,这可以通过用户浏览器进行更改,那么他们有更好的方法来验证用户的输入吗?
我知道我可以通过服务器验证这一切,只需在单击注册按钮时检查文本框,但肯定它们必须是更好的方式,因为用户无法更改?
顺便说一句:我正在使用 Visual Studio C# ASP.NET
另外,我认为正则表达式也可以在客户端更改是否正确
【问题讨论】:
-
您正确地假设来自客户端的所有内容都是不受信任的。即使是单选按钮组或复选框,如果不编辑 dom 就无法修改。是的,可以修改正则表达式。您需要客户端(UX 观点)和服务器端(实际安全)验证。
-
基本规则是从不信任用户。您放置在浏览器中的任何内容在离开您的服务器后都可以被任何人操作。因此,公认的做法是仅将客户端验证作为用户体验机制,将服务器端验证作为实际验证。
-
无论您在客户端做什么或不做什么,您都应该也进行严格的服务器端输入检查。服务器是您抵御非法输入的最后——也是最好的——防御。是的,几乎任何东西都可以在客户端进行更改。 URL 和 HTTP 有效负载也是如此。这并没有降低使用 Javascript 正则表达式的效率......什么都不相信;)
-
您可以通过使用 Web 浏览器中的开发人员工具(按 F12)来编辑 HTML 和 JavaScript 来探索这一点。来吧,绕过一些客户端验证。
-
独立于服务器端验证的需要,我认为值得一提的是,您应该只对客户端可以做的事情进行客户端验证。密码的长度当然是其中之一。检查用户名是否存在肯定是没有的。在任何情况下,客户端都不应知道现有的用户名,并且客户端验证不应导致任何服务器往返。
标签: javascript c# asp.net validation