我有一个这样的表格:
<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;
validateForm()函数只返回&#34; true&#34;如果所有字段都已经过验证。但。
我注意到这可以简单地绕过&#34;检查元素&#34;例如在Firefox或谷歌浏览器中更改&#34; onsubmit =&#34;返回validateForm();&#34; to&#34; onsubmit =&#34; true;&#34;。即使字段尚未经过验证,也会提交表单。
我如何防止这种情况?
谢谢!
答案 0 :(得分:0)
服务器端验证。
客户端验证在良好的用户体验方面非常重要,并且可以防止不必要的服务器访问。
BUT
客户端验证无需更换服务器端验证。客户端代码(javascript)最终在用户的机器上运行,每个人都可以非常轻松地调整和更改它。
答案 1 :(得分:0)
您只是不想只信任javascript验证。你必须在服务器上验证它,甚至可能更难。 javascript方面只是用户的一个奖励,因此他们可以在发送表单后即时通知错误输入而不是长服务器通信。
TL; DR 行为完全正常,您必须验证服务器上的输入。