2013-02-17 86 views
0

我目前使用CodeIgniter。我有4種形式(學生登入,登錄形式,創建賬戶,並要求帳戶)理解HTML淨化器

我目前使用這個目前以過濾的一種形式我輸入(創建賬戶):

function create() 
    { 
     $this->load->library('bcrypt'); 
     $this->load->library('form_validation'); 

     $this->form_validation->set_rules('fname', 'First Name', 'trim|required|alpha|max_length[14]'); 
     $this->form_validation->set_rules('lname', 'Last Name', 'trim|required|alpha|max_length[14]'); 
     $this->form_validation->set_rules('email', 'Email Address', 'trim|required|is_unique[users.email]|valid_email'); 
     $this->form_validation->set_rules('username', 'Username', 'trim|is_unique[users.username]|required|alpha_numeric||min_length[4]|max_length[15]'); 
     $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[7]|alpha_dash|max_length[20]'); 
     $this->form_validation->set_rules('passwordconf', 'Confirm Password', 'trim|required|min_length[7]|max_length[20]|matches[password]|alpha_dash'); 

     if($this->form_validation->run() == FALSE) 
     { 
      $this->view(); 
     } 

我的理解HTML淨化器應該只在用戶數據在表格,論壇,博客(等等)中被回顯/輸出爲HTML時使用。我的理解是否正確?我在問,因爲我的學生登錄表單將用於將數據輸入到數據庫中。然後我的學生隊列頁面將被用於SELECT ... FROM ...那個數據庫。所以這讓我感到困惑,因爲當我爲學生隊列創建輸出時,數據將被安置在數據庫中。它不會直接發佈。

所以反過來我的思路去如下:

  • 驗證數據並確保它是你所期望的
  • 過濾器中的數據與xss_clean像我目前。
  • 使用PDO準備的查詢將數據插入數據庫
  • (現在這一步使我感到困惑)我應該如何迴應我的數據庫數據? 我應該在這一步使用HTML淨化器嗎?

對不起,如果這個問題已被問及一百萬次,我似乎無法找到我在找什麼。我沒有完全理解HTML淨化器的概念。

編輯1:在配置文件中使用全局xss_clean過濾器。

+0

如果數據中包含用戶提交的HTML代碼 - 是的 – 2013-02-17 14:25:05

+0

沒錯,它不應該有HTML或腳本。我只會允許aplha_numberic字符。 – RaGe10940 2013-02-17 14:33:50

+0

然後你不需要淨化器。只需[過濾](http://www.php.net/manual/en/filter.filters.sanitize.php)字段,並確保它們只包含A-Z,0-9 – 2013-02-17 14:37:23

回答

1

HTML淨化器適用於您有一個字符串,其數據類型爲HTML並且您想限制可能出現在其中的HTML種類。

但是,這裏沒有任何字段是HTML - 它們都只是字符串。因此,爲了顯示它們,您只需將字符串轉義爲用HTML顯示,就像您對任何字符串所做的那樣。

更新版本的CodeIgniter具有html_escape()函數。用它在你的看法,像這樣:

<p><?=html_escape($mystring)?></p> 

如果您使用的是舊版本,直接使用htmlspecialchars($mystring, ENT_NOQUOTES, 'utf-8')。你應該把它包裝在一個單參數函數中。

+0

非常感謝。我剛剛從htmlpurifier.org上的其中一個人那裏得到了同樣的答案,這要感謝很多人。 – RaGe10940 2013-02-17 17:54:03