安全指南¶
我們非常重視安全性,CodeIgniter 包含許多功能和技術去加強安全實踐,也能使你輕鬆不少。
我們重視 開放 Web 應用程式安全專案(OWASP) ,並盡可能的遵循他們的建議。
以下為 Web 應用程式的主要漏洞,來自 OWASP 十大備忘錄。對於每個漏洞,我們會簡單的敘述、提供OWASP 的建議,然後利用規定 CodeIgniter 的實踐來解決這個問題。
A1 注入攻擊¶
注入攻擊是在從使用者端到應用程式的輸入資料中,插入不當的資料。攻擊的手段包括 SQL、XML、ORM、代碼和緩衝區溢位。
OWASP 建議¶
- 演示:規定輸入的資料類型、字元集和地區
- 提交:驗證欄位並提供回饋
- 控制器:將輸入內容消毒,使用正確的字元集進行正輸入驗證
- 模型:參數化查詢
A2 身分驗證不足以及工作階段管理不當¶
身份驗證不足或工作階段管理不當都可能導致,使用者獲得超過他們身分的許可權。
OWASP 建議¶
- 演示:驗證使用者和身份;使用表單發送 CSRF token
- 設計:僅使用內置工作階段管理
- 控制器:驗證使用者、身分、CSRF token
- 模型:驗證身分
- 提示:考慮使用請求調速器
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
- 模型:驗證身分
A8 跨網站請求偽造 (CSRF)¶
CSRF 攻擊會迫使在 Web 應用程式中已經驗證身份的終端使用者,執行他們不想要的操作。
OWASP 建議¶
- 演示:驗證使用者和身分;發送 CSRF 權杖
- 控制器:驗證使用者和身分;驗證 CSRF 權杖
- 模型:驗證身分