安全指南?
我們需要認(rèn)真對(duì)待安全問(wèn)題。 CodeIgniter有多項(xiàng)功能和技術(shù)來(lái)執(zhí)行良好的安全習(xí)慣,這樣你需要做的就比較簡(jiǎn)單。
我們尊重 開(kāi)放式Web應(yīng)用程序安全項(xiàng)目 (OWASP) 組織并且盡可能遵循他們的建議。
以下是來(lái)自 OWASP Top Ten Cheat Sheet, 確定 Web 應(yīng)用程序上的漏洞。針對(duì)每一個(gè)漏洞,我們提供了一個(gè)簡(jiǎn)短的描述和 OWASP 建議,然后根據(jù) CodeIgniter 的規(guī)定來(lái)解決這個(gè)漏洞。
A1 注入?
注入攻擊是通過(guò)客戶端的輸入向應(yīng)用程序發(fā)送部分或全部不適當(dāng)?shù)牟迦霐?shù)據(jù)。攻擊向量包括 SQL、XML、ORM、代碼和緩沖區(qū)溢出。
OWASP 建議?
- 說(shuō)明:設(shè)置正確的內(nèi)容類型、字符集和區(qū)域
- 提交:驗(yàn)證字段并且提供反饋
- 控制器:凈化輸入;使用正確的字符集驗(yàn)證輸入
- 模型:參數(shù)化檢查
CodeIgniter 規(guī)定?
- HTTP library 提供輸入字段和內(nèi)容元數(shù)據(jù)的過(guò)濾
- 表格驗(yàn)證庫(kù)
A2 不嚴(yán)謹(jǐn)?shù)牡纳矸菡J(rèn)證和會(huì)話管理?
不充分的身份驗(yàn)證或不恰當(dāng)?shù)臅?huì)話管理會(huì)導(dǎo)致用戶獲得比他們權(quán)限更大的權(quán)限。
OWASP 建議?
- 說(shuō)明:驗(yàn)證認(rèn)證和角色;用表格發(fā)送 CSRF token
- 設(shè)計(jì):只使用內(nèi)置會(huì)話管理
- 控制器:驗(yàn)證用戶、角色、CSRF token
- 模型:驗(yàn)證角色
- 提示:考慮使用 request 管理器
CodeIgniter 規(guī)定?
- Session 庫(kù)
- HTTP library 提供對(duì)CSRF的驗(yàn)證
- 方便添加第三方認(rèn)證
A3 跨站腳本 (XSS)?
輸入驗(yàn)證不足導(dǎo)致其中一個(gè)用戶可以將內(nèi)容添加到一個(gè)網(wǎng)站,當(dāng)其他用戶查看該網(wǎng)站時(shí),該網(wǎng)站可能是惡意的。
OWASP 建議?
- 說(shuō)明:根據(jù)輸出環(huán)境對(duì)所有用戶數(shù)據(jù)進(jìn)行轉(zhuǎn)義;設(shè)置輸入約束
- 控制器:正確的輸入驗(yàn)證
- 提示:只處理可信數(shù)據(jù);不要將 HTML 轉(zhuǎn)義數(shù)據(jù)存入數(shù)據(jù)庫(kù)中。
CodeIgniter 規(guī)定?
- esc 函數(shù)
- 表格驗(yàn)證庫(kù)
A4 直接引用不安全的對(duì)象?
當(dāng)應(yīng)用程序根據(jù)用戶提供的輸入提供直接訪問(wèn)時(shí),就會(huì)發(fā)生不安全的直接對(duì)象引用。由于此漏洞,攻擊者可以繞過(guò)系統(tǒng)中的授權(quán)直接訪問(wèn)資源,例如數(shù)據(jù)庫(kù)記錄或文件。
OWASP 建議?
- 說(shuō)明:不要暴露內(nèi)部數(shù)據(jù);使用隨機(jī)的參考圖
- 控制器:獲得的數(shù)據(jù)來(lái)自可信任的來(lái)源或隨機(jī)的參考圖
- 模型: 更新數(shù)據(jù)之前驗(yàn)證用戶角色
CodeIgniter 規(guī)定?
- 表格驗(yàn)證庫(kù)
- 容易添加第三方認(rèn)證
A5 安全配置錯(cuò)誤?
應(yīng)用程序體系結(jié)構(gòu)配置不當(dāng)會(huì)導(dǎo)致可能危及整個(gè)架構(gòu)安全性的錯(cuò)誤。
OWASP 建議?
- 說(shuō)明:強(qiáng)化 Web 和應(yīng)用服務(wù)器;使用 HTTP 嚴(yán)格傳輸安全
- 控制器:強(qiáng)化 Web 和應(yīng)用服務(wù)器;保護(hù) XML 堆棧
- 模型:強(qiáng)化數(shù)據(jù)庫(kù)服務(wù)器
CodeIgniter 規(guī)定?
- bootstrap 合理的檢查
A6 敏感信息泄露?
敏感數(shù)據(jù)在通過(guò)網(wǎng)絡(luò)傳輸時(shí)必須受到保護(hù)。敏感數(shù)據(jù)可以包括用戶憑證和信用卡。根據(jù)經(jīng)驗(yàn),如果數(shù)據(jù)在存儲(chǔ)時(shí)必須受到保護(hù),那么它在傳輸過(guò)程中也必須受到保護(hù)。
OWASP 建議?
- 說(shuō)明:使用 TLS1.2 (安全傳輸層協(xié)議);使用強(qiáng)密碼和哈希;不要把 keys 或哈希發(fā)送到瀏覽器
- 控制器:使用強(qiáng)密碼和哈希
- 模型:加密和服務(wù)器的通信和授權(quán)
CodeIgniter 規(guī)定?
- 存儲(chǔ)加密的會(huì)話密鑰
A7 缺少功能級(jí)訪問(wèn)控制?
敏感數(shù)據(jù)在通過(guò)網(wǎng)絡(luò)傳輸時(shí)必須受到保護(hù)。敏感數(shù)據(jù)可以包括用戶憑證和信用卡。根據(jù)經(jīng)驗(yàn),如果數(shù)據(jù)在存儲(chǔ)時(shí)必須受到保護(hù),那么它在傳輸過(guò)程中也必須受到保護(hù)。
OWASP 建議?
- 說(shuō)明:確保非Web數(shù)據(jù)在Web根目錄之外;驗(yàn)證用戶和角色;發(fā)送 CSRF tokens
- 控制器:驗(yàn)證用戶和角色;驗(yàn)證 CSRF tokens
- 模塊: 驗(yàn)證角色
CodeIgniter 規(guī)定?
- 公共文件夾,放在 application 和 system 外面
- HTTP library 提供 CSRF 驗(yàn)證
A8 跨站請(qǐng)求偽造(CSRF)?
CSRF是一種攻擊,它迫使最終用戶在當(dāng)前已通過(guò)身份驗(yàn)證的Web應(yīng)用程序上執(zhí)行不必要的操作。
OWASP 建議?
- 說(shuō)明:驗(yàn)證用戶和角色;發(fā)送 CSRF tokens
- 控制器:驗(yàn)證用戶和角色;驗(yàn)證 CSRF tokens
- 模型:驗(yàn)證角色
CodeIgniter 規(guī)定?
- HTTP library 提供 CSRF 驗(yàn)證
A9 使用含有已知漏洞的組件?
許多應(yīng)用程序都可以利用漏洞和已知的攻擊策略,獲得遠(yuǎn)程控制或者得到數(shù)據(jù)。
OWASP 建議?
- 不要使用這些有漏洞的組件
CodeIgniter 規(guī)定?
- 添加第三方庫(kù)時(shí)必須審查
A10 未驗(yàn)證的重定向和轉(zhuǎn)發(fā)?
錯(cuò)誤的業(yè)務(wù)邏輯或注入可操作的代碼可能會(huì)錯(cuò)誤地重定向用戶。
OWASP 建議?
- 說(shuō)明:不要使用 URL 重定向;使用隨機(jī)的間接引用
- 控制器:不要使用 URL 重定向;使用隨機(jī)的間接引用
- 模型:驗(yàn)證角色
CodeIgniter 規(guī)定?
- HTTP library 提供 …
- Session library provides flashdata