2007年5月15日 星期二

CakePHP使用手冊-資料過濾

轉貼自 http://www.ezluk.org/

資料過濾


第一節



程式中使用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'])。
這函式傳入一個陣列,然後將它清理一翻:沒有傳回值,因為直接傳入參照。
下面的清理動作會作用在陣列內每個元素上(遞迴):




  1. 奇怪的空格(包含0xCA)會被用一般的空格取代




  2. HTML字串會被用正確的HTML標籤取代(如\n 換成 <br>).




  3. 再次檢查特殊字元,移除換行字元,增進SQL的安全性。




  4. 為SQL指令加上斜線(和上頭的sql函式一樣)。




  5. 把使用者輸入的反斜線換成可信任的反斜線。




沒有留言:

網誌存檔

關於我自己

Aspire freedom , Hope to do Soming make self complete ~