安全指南

我们认真对待安全问题。CodeIgniter 结合了许多功能和技术来强制执行良好的安全实践,或使您能够轻松地执行这些实践。

我们尊重 开放式 Web 应用程序安全项目 (OWASP) 并尽可能遵循他们的建议。

以下内容来自 OWASP 十大漏洞清单,它识别了 Web 应用程序中最常见的漏洞。对于每个漏洞,我们都提供了简要说明、OWASP 建议,以及 CodeIgniter 用于解决该问题的规定。

A1 注入

注入是指客户端输入数据中不恰当地插入部分或全部数据到应用程序中。攻击向量包括 SQL、XML、ORM、代码和缓冲区溢出。

OWASP 建议

  • 展示:设置正确的 Content-Type、字符集和区域设置

  • 提交:验证字段并提供反馈

  • 控制器:清理输入;使用正确的字符集进行正向输入验证

  • 模型:参数化查询

CodeIgniter 功能

A2 弱身份验证和会话管理

身份验证不足或会话管理不当会导致用户获得超出其权限的权限。

OWASP 建议

  • 展示:验证身份验证和角色;使用表单发送 CSRF 令牌

  • 设计:仅使用内置会话管理

  • 控制器:验证用户、角色、CSRF 令牌

  • 模型:验证角色

  • 提示:考虑使用请求管理器

CodeIgniter 功能

A3 跨站脚本 (XSS)

输入验证不足,其中一个用户可以向网站添加内容,这些内容在其他用户查看网站时可能是恶意的。

OWASP 建议

  • 展示层:根据输出上下文对所有用户数据进行输出编码;设置输入约束

  • 控制器:正向输入验证

  • 提示:仅处理可信数据;不要将 HTML 编码后的数据存储在数据库中

CodeIgniter 功能

A4 不安全的直接对象引用

当应用程序根据用户提供的输入提供对对象的直接访问时,就会发生不安全的直接对象引用。由于此漏洞,攻击者可以绕过授权并直接访问系统中的资源,例如数据库记录或文件。

OWASP 建议

  • 展示层:不要公开内部数据;使用随机引用映射

  • 控制器:从可信来源或随机引用映射获取数据

  • 模型:在更新数据之前验证用户角色

CodeIgniter 功能

A5 安全配置错误

应用程序架构的配置不当会导致错误,这些错误可能会危及整个架构的安全性。

OWASP 建议

  • 展示层:加固 Web 和应用程序服务器;使用 HTTP 严格传输安全

  • 控制器:加固 Web 和应用程序服务器;保护您的 XML 堆栈

  • 模型:加固数据库服务器

CodeIgniter 功能

  • 引导期间的健全性检查

A6 敏感数据泄露

敏感数据在通过网络传输时必须受到保护。此类数据可能包括用户凭据和信用卡。一般来说,如果数据在存储时必须受到保护,则在传输过程中也必须受到保护。

OWASP 建议

  • 展示层:使用 TLS1.2;使用强加密算法和哈希函数;不要将密钥或哈希值发送到浏览器

  • 控制器层:使用强加密算法和哈希函数

  • 模型层:强制与服务器之间进行强加密通信

CodeIgniter 配置

  • 全局安全访问配置 (Config\App::$forceGlobalSecureRequests)

  • force_https() 函数

  • 加密服务

  • 数据库配置 (encrypt)

A7 缺少函数级访问控制

敏感数据在通过网络传输时必须受到保护。此类数据可能包括用户凭据和信用卡。一般来说,如果数据在存储时必须受到保护,则在传输过程中也必须受到保护。

OWASP 建议

  • 展示层:确保非 Web 数据位于 Web 根目录之外;验证用户和角色;发送 CSRF 令牌

  • 控制器层:验证用户和角色;验证 CSRF 令牌

  • 模型层:验证角色

CodeIgniter 配置

A8 跨站点请求伪造 (CSRF)

CSRF 是一种攻击,它迫使最终用户在当前已验证的 Web 应用程序上执行不希望的操作。

OWASP 建议

  • 展示层:验证用户和角色;发送 CSRF 令牌

  • 控制器层:验证用户和角色;验证 CSRF 令牌

  • 模型层:验证角色

CodeIgniter 配置

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

许多应用程序都存在已知的漏洞和已知的攻击策略,这些策略可以被利用以获得远程控制或利用数据。

OWASP 建议

  • 不要使用任何这些

CodeIgniter 条款

  • 必须审查已整合的第三方库

A10 未经验证的重定向和转发

有缺陷的业务逻辑或注入的可操作代码可能会不适当地重定向用户。

OWASP 建议

  • 演示:不要使用 URL 重定向;使用随机间接引用

  • 控制器:不要使用 URL 重定向;使用随机间接引用

  • 模型层:验证角色

CodeIgniter 条款