阻止用户绕过验证

时间:2016-03-07 14:32:26

标签: javascript html

我有一个这样的表格:



<form id="loginForm" action="register.php" method="post" onsubmit="return validateForm();">
    <p>Register:</p>
        <p style="text-align: left;">Full name: <br><input type="text" name="name" required/></p>
        <p style="text-align: left;">Email: <br><input id="email" type="text" name="email" onkeyup="validateEmail(value);"required/></p>
      <span id="emailError" style="display:none;border:1px solid red;">Please enter a valid email</span>
        <p style="text-align: left;">Username: <br><input id="username" type="text" name="username" onkeyup="validateUsername(value);" required/></p>
        <span id="usernameError" style="display:none;border:1px solid red;">Username can only contain a-z, 0-9 and must be at least 6 characters long</span>
        <span id="usernameTaken" style="display:none;border:1px solid red;">Username taken</span>
        <p style="text-align: left;">Password: <br><input id="password" type="password" name="password" onkeyup="validatePassword(value);" required/></p>
        <span id="passwordError" style="display:none;border:1px solid red;">Password requires one lower case letter, one upper case letter, one digit,no spaces and  6-13 length</span>
        <input type="submit" value="Register">
    </form>
&#13;
&#13;
&#13;

validateForm()函数只返回&#34; true&#34;如果所有字段都已经过验证。但。

我注意到这可以简单地绕过&#34;检查元素&#34;例如在Firefox或谷歌浏览器中更改&#34; onsubmit =&#34;返回validateForm();&#34; to&#34; onsubmit =&#34; true;&#34;。即使字段尚未经过验证,也会提交表单。

我如何防止这种情况?

谢谢!

2 个答案:

答案 0 :(得分:0)

服务器端验证。

客户端验证在良好的用户体验方面非常重要,并且可以防止不必要的服务器访问。

BUT

客户端验证无需更换服务器端验证。客户端代码(javascript)最终在用户的机器上运行,每个人都可以非常轻松地调整和更改它。

答案 1 :(得分:0)

您只是不想只信任javascript验证。你必须在服务器上验证它,甚至可能更难。 javascript方面只是用户的一个奖励,因此他们可以在发送表单后即时通知错误输入而不是长服务器通信。

TL; DR 行为完全正常,您必须验证服务器上的输入。