線上書籍

Home

[1002] PHP入門班

一、 不要相信使用者
  1. 程式開發者永遠把使用者當壞人。
  2. 請試著輸入各種亂七八糟的資料到您的表單中,例如「'測試'」、「\測試\」、「<font color=red>測試</font>」、「"測試"」
二、 整理資料
  1. trim($str,[$charlist]):從空白處開始去除資料中的空白、換行、tab...等特殊符號。第二個參數可自訂要刪除哪些字元。
  2. ltrim($str,[$charlist]):僅清除左邊,rtrim($str,[$charlist]): 僅清除右邊。
  3. htmlspecialchars($str):將網頁標籤展為特殊字符(即關閉HTML功能)
    • (1)  「'引號' 設為<b>粗體</b>」會變成「'引號' 設為&lt;b&gt;粗體&lt;/b&gt;」
    • (2)  htmlspecialchars($str,ENT_QUOTES):連同單引號、雙引號也要轉換
  4. intval():將資料轉換成數字型態(32位元系統範圍:-2147483648 to 2147483647 ,64位元系統範圍:9223372036854775807)
echo intval(42); // 42 echo intval(4.2); // 4 echo intval('42'); // 42 echo intval('+42'); // 42 echo intval('-42'); // -42 echo intval(042); // 34 echo intval('042'); // 42 echo intval(1e10); // 1410065408 echo intval('1e10'); // 1 echo intval(42000000); // 42000000 echo intval(420000000000000000000); // 0 echo intval('420000000000000000000'); // 2147483647
三、 魔術引號Magic Quotes
  1. 當php.ini中的magic_quotes_gpc=On時,自動對所有的 GET、POST、COOKIE 資料中,針對 '(單引號),"(雙引號),\(反斜線)和 NULL 字符都會被自動加上一個反斜線進行轉義。這和 addslashes() 作用完全相同。
  2. 魔術引號在 PHP 中用來減少隱碼攻擊風險。(隱碼攻擊:SQL injection,在輸入的字串之中夾帶SQL指令,在設計不良的程式當中忽略了檢查,那麼這些夾帶進去的指令就會被資料庫伺服器誤認為是正常的SQL指令而執行,因此遭到破壞。)
  3. 為什麼PHP6不用魔術引號
    • (1)  可移植性:因為每台機器設定都不同,容易影響移植性。建議自己用 get_magic_quotes_gpc() 來檢查是否打開,並據此來寫相關處理動作。
    • (2)  性能:由於並不是每一段被轉義的資料都要插入到資料庫的,如果所有資料都被轉義的話,那麼會對程序的執行效率產生一定的影響。
    • (3)  不便:由於不是所有數據都需要轉義,在不需要轉義的地方看到轉義的資料就很煩。比如說通過表單發送郵件,結果看到一大堆的 \'。
  4. get_magic_quotes_gpc ():用來取得目前魔術引號的設定狀況
  5. addslashes():針對 '(單引號),"(雙引號),\(反斜線)和 NULL 字符都會被自動加上一個反斜線進行轉義。
  6. stripslashes():去除反斜線用。
  7. 資料新增到資料庫前可以這樣用:$content = (! get_magic_quotes_gpc ()) ? addslashes ($content) : $content;

 您可以用「';<script>alert('aaa');</script>」來測試看看。