2012-04-09 25 views
4

我有一個簡單的表單,使用用戶名和密碼登錄。我想申請一個白名單,只允許某些字符。我不知道是否有人需要這一點,但這裏是代碼來獲取用戶名和密碼:在用戶輸入上使用白名單

$stmt = $conn2->prepare("SELECT username FROM users WHERE username = ? AND password = ?"); 

$stmt->bind_param("ss", $username, $password);  
$stmt->execute(); 
$stmt->store_result(); 

我是否納入這樣的:

preg_replace("/[^a-zA-Z0-9_]/", "", $stringToFilter); 

如果是這樣,我在哪裏有它在我的碼?如果用戶試圖輸入除白名單內的內容之外的內容,會發生什麼情況?

ADDED:好吧那麼如果它是在註冊期間,它使用INSERT來存儲用戶名和密碼呢?

//insert data 
$stmt = $conn2->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)"); 

//bind the parameters 
$stmt->bind_param('sss', $username, $email, $password); 
+1

這可能是您應該在註冊時強制執行的事情,而不是登錄時間。 (另外,您不需要將參數化查詢的輸入列入白名單,但不會執行插入操作。) – Amber 2012-04-09 22:53:13

+0

用戶名中帶有連字符的用戶有什麼危害? – 2012-04-09 22:54:36

+0

看添加位信息 – user1278496 2012-04-09 22:56:32

回答

7

在註冊期間在您的INSERT之前添加過濾代碼。檢查過濾後字符串是否爲空,以便用戶名"!!*&%$#()*&#$"不會作爲空白字符串插入。

$username_clean = preg_replace("/[^a-zA-Z0-9_]/", "", $_POST['username']); 

if (!strlen($username_clean)){ 

    die("username is blank!"); 
} 

$stmt = $conn2->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)"); 
$stmt->bind_param('sss', $username_clean, $email_clean, $password_clean); 
+0

是的,這是我的想法。我會怎麼做? – user1278496 2012-04-09 23:03:23

+0

用粗略的大綱更新了答案 – Cal 2012-04-09 23:07:50

+0

謝謝matey – user1278496 2012-04-09 23:09:29

相關問題