資料過濾
第一節
程式中使用Sanitize
Cake內建的Sanitize類別是用來防止使用者傳送惡意攻擊資料或其他不想要的資料。
Sanitize是核心函式庫的一部分,所以可以在程式中任何一個地方使用,但最好是在controller或model裡使用。
// 首先,把核心函式庫包含進來:
uses('sanitize');
// 接下來,建立Sanitize物件:
$mrClean = new Sanitize();
// 從這裡開始就可以使用Sanitize清除資料
// (下節會介紹Sanitize類別中可以使用的方法)
第二節
讓資料安全地在SQL和HTML裡使用
這一節會說明如何使用Sanitize類別所提供的一些函式。
paranoid
- string $string
- array $allowedChars
此函式會將$string裡非文字的資料去除。
然而,你也可以把想要保留的字元放在$allowedChars陣列裡。
$badString = ";:<script><html>< // >@@#";
echo $mrClean->paranoid($badString);
// 輸出: scripthtml
echo $mrClean->paranoid($badString, array(' ', '@'));
// 輸出: scripthtml @@
html
- string $string
- boolean $remove = false
這函式幫你將使用者提交的HTML資料以純文字的模式直接顯示在既存的HTML layout上。
當不想讓使用者破壞你的layout或在blog的文章內插入影像或script時特別有用。
如果$remove設成true,所有的HTML標籤都會被刪除,而不是直接把HTML檔字串看列印。
$badString = '<font color="#FF0000">HEY</font>';
echo $badString;
//輸出:HEY
echo $mrClean->html($badString);
// 輸出: <font color="#FF0000">HEY</font>
echo $mrClean->html($badString, true);
// 輸出: font color=#FF0000 HEY font
sql
- string $string
將SQL指令脫逸(加上斜線),讓SQL指令被指為一般文字處理。
處理方法依系統magic_quotes_gpc 變數的設定值決定。
cleanArray
- array @$dirtyArray
這個函式的功能十分強大,是個多功能的清理器,可以用於整個陣列上(如$this->params['form'])。
這函式傳入一個陣列,然後將它清理一翻:沒有傳回值,因為直接傳入參照。
下面的清理動作會作用在陣列內每個元素上(遞迴):
奇怪的空格(包含0xCA)會被用一般的空格取代
HTML字串會被用正確的HTML標籤取代(如\n 換成 <br>).
再次檢查特殊字元,移除換行字元,增進SQL的安全性。
為SQL指令加上斜線(和上頭的sql函式一樣)。
把使用者輸入的反斜線換成可信任的反斜線。
沒有留言:
張貼留言