安全性
本頁描述一些有關網站安全的 "最佳實證" ,同時包含了CodeIgniter 的內部安全機制細節。
URI 安全性
CodeIgniter 對於哪些字元允許當作 URI 字串有相當嚴格的考量,以盡量減少惡意資料進入應用程式的可能性。URIs 只能包含下列字元:
- 英文大小寫字母與數字Alpha-numeric text
- Tilde: ~
- 英文小數點 Period: .
- 冒號 Colon: :
- 底線 Underscore: _
- 減號 Dash: -
Register_globals
除了在 $_GET, $_POST, 以及 $_COOKIE 陣列中找到的變數,在系統初始化時,所有的整體變數都會 unset ,這個 unsetting 常式效用等同於 register_globals = off 選項設定。
error_reporting
在上線產品網站環境中,只要將 error_reporting 設定為 0 就可以停止所有錯誤輸出。關閉錯誤輸出將會隱藏掉淺在的錯誤資訊。
在 index.php 檔案 設定 CodeIgniter 的 ENVIRONMENT 變數值為 'production',系統環境將會關閉錯誤輸出。如果在開發環境之下,建議將 ENVIRONMENT 設定為 'development',如果想要瞭解更多不同的環境變數值,請參考 處理多個環境 線上文件。
magic_quotes_runtime
magic_quotes_runtime 設定指引會在系統初始化時關閉,所以當你從資料庫取得資料時不必移除 slashes。
最佳實證
在接受任何資料進入應用程式前,無論是表單提交來的POST資料、COOKIE資料、URI資料、XML-RPC資料甚至是從SERVER陣列來的資料,我們都鼓勵你盡量實踐以下三步驟的進程:
- 把資料當作已被污染來過濾。
- 做好資料驗證以保證它符合正確的型別、長度、大小等。(有時這個步驟可以取代步驟一)
- 在把資料送進你的資料庫前跳脫(escape)資料。
CodeIgniter提供下列的函數來協助你進行這個過程:
跨站腳本(XSS)過濾
CodeIgniter隨附了一個跨站腳本過濾器。這個過濾器會檢視一些在你資料中嵌入惡意Javascript的常見技術,還有企圖盜取cookie或是進行其他惡意行為的各種程式碼。跨站腳本(XSS)過濾器在 這裡 有一些說明。
資料驗證
CodeIgniter有一個 表單驗證類別 來協助你驗證、過濾及準備你的資料。
在資料存入資料庫前跳脫(escape)所有資料
千萬不要不跳脫(escape)任何資訊就把它存入資料庫。請看一下討論 查詢(queries) 的章節來獲得更詳細的資訊。