在CodeIgniter应用开发中,敏感数据保护和认证过滤器是构建安全系统的核心部分,合理运用相关特性可以有效避免数据泄露、非法访问等安全问题,本文将详细介绍对应的实现最佳实践。

敏感数据保护的核心实践
敏感数据加密存储
对于用户密码、支付密钥这类敏感数据,绝对不能直接明文存储到数据库。CodeIgniter内置了加密类,我们可以使用其提供的密码哈希功能处理用户密码。
首先需要在配置文件中开启加密驱动,在app/Config/Encryption.php中配置如下:
<?php
namespace Config;
use CodeIgniterConfigBaseConfig;
class Encryption extends BaseConfig
{
// 加密驱动,默认使用OpenSSL
public string $driver = 'OpenSSL';
// 加密密钥,建议通过环境变量配置,不要硬编码
public string $key = '';
// 加密算法
public string $cipher = 'AES-256-CBC';
// 摘要算法
public string $digest = 'SHA512';
}
处理用户密码时,推荐使用PHP内置的password_hash函数,框架也兼容该函数的使用,存储密码的示例代码如下:
<?php
namespace AppControllers;
use AppModelsUserModel;
use CodeIgniterController;
class RegisterController extends Controller
{
public function store()
{
$userModel = new UserModel();
$data = [
'username' => $this->request->getPost('username'),
// 使用password_hash加密密码,默认使用PASSWORD_DEFAULT算法
'password' => password_hash($this->request->getPost('password'), PASSWORD_DEFAULT)
];
$userModel->save($data);
return redirect()->to('/login');
}
}
敏感数据传输防护
敏感数据在网络传输过程中需要避免被窃取,首先要确保应用部署了有效的SSL证书,所有请求都走HTTPS协议。其次对于接口返回的敏感数据,需要做脱敏处理,比如用户手机号只展示前三位和后四位,中间用星号替换。
脱敏处理的示例函数如下:
<?php
function desensitizePhone(string $phone): string
{
if (strlen($phone) !== 11) {
return $phone;
}
return substr($phone, 0, 3) . '****' . substr($phone, 8, 3);
}
认证过滤器的最佳实践
自定义认证过滤器实现
CodeIgniter的过滤器可以在请求到达控制器之前做权限校验,我们可以自定义认证过滤器来验证用户是否登录、是否有对应接口的访问权限。
首先在app/Filters目录下创建AuthFilter.php文件,代码如下:
<?php
namespace AppFilters;
use CodeIgniterFiltersFilterInterface;
use CodeIgniterHTTPRequestInterface;
use CodeIgniterHTTPResponseInterface;
class AuthFilter implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
// 检查session中是否存在用户登录标识
$session = session();
if (!$session->has('user_id')) {
// 未登录则跳转到登录页
return redirect()->to('/login')->with('error', '请先登录');
}
// 如果有额外权限参数,校验用户权限
if ($arguments && !in_array($session->get('user_role'), $arguments)) {
return redirect()->to('/unauthorized')->with('error', '无访问权限');
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
// 请求后无需额外处理
}
}
过滤器注册与使用
创建完过滤器后,需要在app/Config/Filters.php中注册该过滤器,配置如下:
<?php
namespace Config;
use CodeIgniterConfigBaseConfig;
class Filters extends BaseConfig
{
public array $aliases = [
'auth' => AppFiltersAuthFilter::class,
// 其他过滤器别名
];
public array $filters = [];
// 全局过滤器,所有请求都会经过
public array $global = [
'before' => [
// 排除登录、注册等无需认证的接口
'auth' => ['except' => ['login*', 'register*', 'forgot_password*']]
],
'after' => []
];
// 针对特定路由的过滤器配置
public array $methods = [];
public array $filters = [
'auth' => ['before' => ['admin/*']]
];
}
过滤器使用注意事项
- 不要在过滤器中编写过多业务逻辑,过滤器只负责权限校验,业务逻辑放到控制器或模型中处理。
- 对于API接口的认证,可以在过滤器中校验请求头中的Token,而不是依赖Session。
- 敏感操作比如修改密码、支付等,建议在控制器中再做一次二次校验,不要仅依赖过滤器的校验。
常见安全误区规避
很多开发者会把加密密钥硬编码在代码中,这是非常危险的做法,一旦代码泄露,所有加密数据都会被破解。建议把密钥、数据库密码等敏感配置放到环境变量中,通过getenv函数获取。
另外不要在日志中记录敏感数据,比如用户密码、银行卡号等,避免日志文件泄露导致数据外泄。如果需要记录调试信息,要对敏感字段做脱敏处理。
安全是一个持续的过程,除了做好敏感数据保护和认证过滤器配置,还要定期更新框架版本,修复已知的安全漏洞,同时做好服务器的安全配置,多维度保障应用安全。
CodeIgniter认证过滤器敏感数据保护数据加密修改时间:2026-06-24 02:21:37