2010-02-13 75 views
3

使用Codeigniter,我可以創建用於用戶身份驗證的功能。 我有一個函數,我打電話來檢查給出的用戶名/密碼是否有效。 我遇到的問題是,如果沒有給出密碼,我不希望代碼顯示「無效登錄」。它應該是「需要密碼」或類似的東西。通過表單驗證刪除不必要的錯誤消息

我想我不能要求密碼字段,在這種情況下,空密碼會導致無論如何失敗的日誌。但是,我想確保SQL注入不會發生。

$this->form_validation->set_rules('username','username','required|callback_authenticate'); 
$this->form_validation->set_rules('password','password','required'); 

$this->form_validation->set_message('authenticate','Invalid login. Please try again.'); 

身份驗證功能

function authenticate() { 

    return Current_User::checkLogin($this->input->post('username'), 
              $this->input->post('password')); 
} 
+0

一定是缺乏睡眠,但不要求它不會是世界的盡頭。沒有什麼可以注入的。我只需要確定是否有「文本」,我必須去除任何虛假的東西。 – luckytaxi 2010-02-13 22:50:57

回答

1

我建議你創建你可以在與您可以添加到set_rules()功能這樣的規則中使用一個回調函數:

$這個 - > form_validation-> set_rules( '密碼', '密碼', '需要| your_callback_function');

這樣,required規則肯定會首先被調用。當用戶輸入密碼時,將檢查下一個規則。在這種情況下,它會經過您的回調驗證功能。如果用戶在密碼字段中未輸入任何內容,則該錯誤消息應自動顯示需要密碼。

如果要防止密碼字段上的SQL注入,請將sha1md5規則添加到密碼字段中。

檢查出回調:您自己的驗證功能Form Validation library

此外,如果您將使用Active Record class而不是手動輸入查詢,那麼由於系統會自動轉義值,因此查詢將更安全。您也可以選擇使用預準備語句來防止SQL注入。