安全指南

我們非常重視安全性,CodeIgniter 包含許多功能和技術去加強安全實踐,也能使你輕鬆不少。

我們重視 開放 Web 應用程式安全專案(OWASP) ,並盡可能的遵循他們的建議。

以下為 Web 應用程式的主要漏洞,來自 OWASP 十大備忘錄。對於每個漏洞,我們會簡單的敘述、提供OWASP 的建議,然後利用規定 CodeIgniter 的實踐來解決這個問題。

A1 注入攻擊

注入攻擊是在從使用者端到應用程式的輸入資料中,插入不當的資料。攻擊的手段包括 SQL、XML、ORM、代碼和緩衝區溢位。

OWASP 建議

  • 演示:規定輸入的資料類型、字元集和地區
  • 提交:驗證欄位並提供回饋
  • 控制器:將輸入內容消毒,使用正確的字元集進行正輸入驗證
  • 模型:參數化查詢

CodeIgniter 實踐

  • HTTP 程式庫 提供對輸入欄位的過濾和內容的元資料
  • 表單驗證程式庫

A2 身分驗證不足以及工作階段管理不當

身份驗證不足或工作階段管理不當都可能導致,使用者獲得超過他們身分的許可權。

OWASP 建議

  • 演示:驗證使用者和身份;使用表單發送 CSRF token
  • 設計:僅使用內置工作階段管理
  • 控制器:驗證使用者、身分、CSRF token
  • 模型:驗證身分
  • 提示:考慮使用請求調速器

CodeIgniter 實踐

A3 跨站腳本攻擊 (XSS)

當對輸入的驗證不足時,使用者可以向網站添加惡意內容,影響其他使用者瀏覽網站。

OWASP 建議

  • 演示:將使用者資料編碼成單一內容,並限制輸入內容
  • 控制器:正輸入驗證
  • 提示:僅處理可信的資料;不在資料庫中儲存 HTML

CodeIgniter 實踐

  • esc 函數
  • 表單驗證程式庫

A4 不安全的直接參考物件

當應用程式根據使用者輸入的內容,直接存取物件時,會發生這個漏洞。由於此漏洞,攻擊者可以繞過授權並直接存取系統中的資源,例如資料庫記錄或檔案。

OWASP 建議

  • 演示:不公開內部資料;使用隨機參考映射
  • 控制器:只從受信任的來源或隨機參考映射來獲取資料
  • 模型:在更新資料之前,先驗證使用者的身分

CodeIgniter 實踐

  • 表單驗證程式庫
  • 易於添加第三方的驗證功能

A5 錯誤的安全設定

不當的設定應用程式架構可能會導致錯誤,從而危及整個架構的安全性。

OWASP 建議

演示:強化 Web 和應用程式伺服器;使用嚴格的 HTTP 安全性傳輸 控制器:強化 Web 和應用伺服器;保護你的 XML 堆疊 模型:強化資料庫伺服器

CodeIgniter 實踐

  • 在 bootstrap 時進行合理的檢查

A6 暴露敏感的資料

敏感的資料透過網路傳輸時必須受到保護。例如使用者憑據和信用卡就屬於此類資料。根據經驗,如果資料儲存時就必須保護資料,則在傳輸過程中也必須保護資料。

OWASP 建議

演示:使用 TLS1.2;使用有強密碼和雜湊;不向瀏覽器發送金鑰或雜湊 控制器:使用強密碼和雜湊 模型:要求與伺服器通信時,進行強加密

CodeIgniter 實踐

  • 加密儲存工作階段金鑰

A7 缺少功能級存取控制

敏感的資料透過網路傳輸時必須受到保護。例如使用者憑據和信用卡就屬於此類資料。根據經驗,如果資料儲存時就必須保護資料,則在傳輸過程中也必須保護資料。

OWASP 建議

  • 演示:確保 Web 根目錄內沒有非 Web 資料;驗證使用者和角色;發送 CSRF token
  • 控制器:驗證使用者和身分;驗證 CSRF token
  • 模型:驗證身分

CodeIgniter 實踐

  • 在應用程式和系統外部有公用資料夾。
  • HTTP 程式庫 提供 CSRF 驗證

A8 跨網站請求偽造 (CSRF)

CSRF 攻擊會迫使在 Web 應用程式中已經驗證身份的終端使用者,執行他們不想要的操作。

OWASP 建議

  • 演示:驗證使用者和身分;發送 CSRF 權杖
  • 控制器:驗證使用者和身分;驗證 CSRF 權杖
  • 模型:驗證身分

CodeIgniter 實踐

A9 使用具有已知漏洞的元件

許多應用程式或程式庫都有已知的漏洞和攻擊策略,可以利用他們來獲得遠端的控制權或資料。

OWASP 建議

  • 避免使用這些元件

CodeIgniter 實踐

  • 合作的第三方程式庫都需要經過審核

A10 未驗證的重新導向和跳轉

錯誤的業務邏輯或被注入可操作的程式碼可能會不當的重定向使用者。

OWASP 建議

  • 演示:避免使用 URL 重新導向;使用隨機間接參考
  • 控制器:避免使用 URL 重新導向;使用隨機間接參考
  • 模型:驗證身分

CodeIgniter 實踐