2015-07-11 153 views
-1

我完全理解JavaScript应该用来增强用户体验,但是我有时会使用它来验证输入,例如检查密码文本框是否超过5个字符或检查用户名文本框中输入的用户名是否已经存在存在。正如你所想象的,如果密码少于5个字符或用户名已经存在,注册按钮将被禁用。什么是验证用户输入的正确方法?

但是,这可以从用户浏览器改变,他们是否有更好的方式来验证用户的输入?

我知道我可以验证它全部通过服务器只是通过检查文本框时,单击注册按钮,但肯定它们必须是更好的方式,因此,用户不能改变?

BTW:我使用Visual Studio的C#ASP.NET

而且,我是正确的认为正则表达式也可以在客户端改变

+0

假设客户端的所有内容都是不可信的,这是正确的。即使没有编辑dom也无法修改单选按钮组或复选框等内容。是的,正则表达式可以修改。您需要客户端(UX立场)和服务器端(实际安全)验证。 – jdphenix

+1

基本规则是永不相信用户。任何你放置在浏览器中的东西都可以在任何人离开你的服务器后被任何人操纵。因此,接受的做法是仅作为用户体验机制进行客户端验证,并将服务器端验证作为实际验证。 –

+0

无论你做什么或者你不做客户端,你都应该*也有*严格的服务器端输入检查。服务器是您防止非法输入的最后一道防线。是的,任何事情都可以在客户端进行修改。 URL和HTTP负载也差不多。这不会使Javascript正则表达式效率不高Trust Nothing;) – paulsm4

回答

-3

确实,客户端代码的本质是它是可操纵的。通过使用函数的Private和Privileged成员,您可以靠近通过控制台防止更改代码。 在构造函数中,特权方法分配为this,并且只调用私有变量。就拿这个例子从crockford.com,

function Container(param) { 

    function dec() { 
     if (secret > 0) { 
      secret -= 1; 
      return true; 
     } else { 
      return false; 
     } 
    } 

    this.member = param; 
    var secret = 3; 
    var that = this; 

    this.service = function() { 
     return dec() ? that.member : null; 
    }; 
} 

的服务功能priviledged并能够调用私有dec()方法,它可以访问私有secret变量。 service是一种特权方法,因为如果直接调用该方法,它将返回null.service而不是其有权访问的变量的期望值secret

因为服务器端代码可能需要专门的结构化数据,如果没有正确的javascript,将无法被接受,您可以在评估密码时使用它。

5

验证应在客户端上完成和服务器。如果您选择不使用内置验证的框架,则可以编写自己的正则表达式来执行此操作。

客户端验证可以被绕过,其主要目的是用户体验。 See here。服务器端验证更难绕过。

+0

你绝对正确。此外,[OWASP Top 10](https://www.owasp.org/index.php/Top_10_2013-Top_10)(*强制性阅读*)的无耻插件:https://www.owasp.org/index.php /类别:OWASP_Top_Ten_Project – paulsm4

1

永远不要依赖于客户端验证。必须经常进行双重检查,一个在客户端,另一个在服务器端。 Java脚本,J查询和正则表达式可以为你做到这一点。作为一个侧面说明,使用参数查询。

相关问题