2016-03-07 38 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)最終在用戶的機器上運行,並且每個人都可以非常輕鬆地調整和更改它。