2013-08-26 71 views
0

所以我正在註冊表單上,我有四個字段:名稱,用戶名,電子郵件和密碼。我在jQuery中獲取這些字段的值,並根據是否所有字段都已填充,我通過ajax將它們傳遞給PHP腳本。對於表單驗證安全嗎?我擔心數據被用戶操縱。表單驗證 - 安全

進一步在PHP腳本中,我檢查是否所有發佈的值都有數據,只有這樣我才能繼續進行一些驗證......驗證是我擔心它不是最好的部分而且它有很多缺陷。

$name = $_POST['name']; 
    $username = $_POST['username']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 


if (!preg_match("/^[A-Za-z '-]+$/i", $name)) { 

     $errors = "Please enter a valid name."; 

    } else if (!preg_match("/^[A-Za-z]+\s[A-Za-z]+$/", $name)) { 

     $errors = "Please enter your first and last name."; 

    } else if (strlen($username) <= 3 || strlen($username) > 15) { 

     $errors = "Please pick a username between 4 - 15 characters. Be creative."; 

    } else if (!preg_match("/^[A-Za-z][A-Za-z0-9_.-]{4,15}$/", $username)) { 

     $errors = "Please pick an alphanumeric username between 4 - 15 characters."; 

    } else if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) { 

     $errors = "Please enter a valid email."; 

    } else if (strlen($username)< 6 || strlen($username) > 32) { 

     $errors = "Your password must atleast be 6 characters."; 

    } else { 

     echo "valid"; 

    } 

這些驗證步驟是否安全?是否有任何用戶可以操縱數據的循環漏洞?此外,我希望輸入全名,用戶將輸入第一個姓和姓。這些夠好嗎?

謝謝。

+1

看起來好像沒什麼問題.... –

+1

或許它應該去http://codereview.stackexchange.com –

+0

「安全」 沒什麼意思與斷章取義 – 2013-08-26 03:54:42

回答

3

至於你問審覈,請閱讀你寫到這裏什麼......

} else if (strlen($username)< 6 || strlen($username) > 32) { 
    $errors = "Your password must atleast be 6 characters." 
+0

謝謝,沒有抓住。除此之外,一切都很好?即使是正則表達式的? – Elmer

+0

@Elmer不,一切都完全錯誤:1)空名稱怎麼樣? 2)外國人怎麼樣?那麼'strlen()'會說謊。你需要編寫一個處理這一切的層。看看它如何在'Zend Framework 2'中完成# – Yang

+0

第一個和第二個正則表達式衝突的結果。我會添加更多的密碼規則。 –

0

有些時候,Java腳本,可能不是最好的解決方案,因爲一些用戶禁用它。所以也要考慮一下。

和插入數據,我們應該考慮關於「SQL注入」,數據庫時,「加密方法」等。

我想你應該閱讀和學習一些網絡上的文章。試試這些鏈接。

http://www.sitepoint.com/form-validation-with-php/

http://www.w3resource.com/javascript/form/javascript-sample-registration-form-validation.php

http://www.hscripts.com/scripts/JavaScript/form-validation.php