過濾用戶輸入一直也是 web 應用很重要的安全工作,在 PHP 內除了自行編寫過濾特別字符串的程式外,也可以用現成的 PECL extension: Input Filter extension。要使用這個 extension 需要在 shell 輸入以下指令安裝:

pecl install filter

以下例子假設有一張表單,裡面有兩個欄位: name, age 及 email。而我們希望 name 會用字串;age 是數字;email 就是電郵格式,那麼便可以這樣做:

PHP:
  1. <?php
  2. $clean = array();
  3.  
  4. $clean['name']  = filter_input(INPUT_POST, 'name',  FILTER_VALIDATE_REGEXP, array('regexp' => '^[w ]+$'));
  5. $clean['age']   = filter_input(INPUT_POST, 'age',   FILTER_VALIDATE_INT);
  6. $clean['email'] = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
  7. ?>

以上會使用 filter_input 函式來過濾輸入,如果輸入是合符規定,會回傳沒有改動的變數;如果不符合規定,便會回傳 FALSE,而如果變數不存取便會回傳 NULL。

如果不想回傳 FALSE,而是回傳經過處理的輸入,假設 $_POST['name'] 是 "<b>My Name</b>" 可以這樣做:

PHP:
  1. <?php
  2. $clean = array();
  3. $clean['name']  = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
  4. ?>