2016-03-07 41 views
0

我有一个表格是这样的:防止用户绕过验证

<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>

的validateForm()函数只有在所有的领域都得到了验证返回“真”。但。

我注意到,这可以通过简单的“检查元素”,例如Firefox或Google Chrome,并将“onsubmit =”return validateForm();“更改为”onsubmit =“true;”来绕过。即使这些字段没有被验证,表单也会被提交。

我该如何预防?

谢谢!

+3

_如何防止this_服务器端验证 – baao

+2

永远不要信任Javascript验证,因为它们可以被停用....始终添加服务器端验证 – cl3m

+0

通过在客户端和服务器上进行验证,您可以避免绕过验证不能防止在客户端绕过(至少不能使用有意义的或者值得的方法),但是如果你在服务器上执行任务,那么你很稳定。 – Jonast92

回答

0

你只是不想只信任javascript验证。你必须在服务器上验证,也许更难。 javascript方面只是用户的奖励,所以他们可以在发送表单后立即通知有关错误的输入,而不是长时间的服务器通信。

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

0

服务器端验证。

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

但是

客户端验证是没有办法替代良好的服务器端验证。客户端代码(javascript)最终在用户的机器上运行,并且每个人都可以非常轻松地调整和更改它。