安全服务 - 代码示例
PasswordService - 密码安全
use app\common\service\PasswordService;
// 验证密码强度
$check = PasswordService::validateStrength('myPassword123');
// 返回: ['valid'=>true, 'score'=>80, 'issues'=>[]]
// 安全哈希密码
$hash = PasswordService::hash('myPassword123');
// 使用 bcrypt + 随机盐值
// 验证并自动升级旧哈希
$result = PasswordService::verifyAndUpgrade(
'myPassword123', $storedHash
);
// 返回: ['valid'=>true, 'newHash'=>null]
// 如果旧哈希需要升级,newHash不为null
// 生成随机密码
$random = PasswordService::generateRandom(12);
RateLimitService - 访问限流
use app\common\service\RateLimitService;
// 检查是否超过限制
$result = RateLimitService::check(
'login_192.168.1.1', // 限流键
5, // 最大次数
300 // 时间窗口(秒)
);
// 返回: ['allowed'=>true, 'remaining'=>4]
// 获取剩余次数
$remaining = RateLimitService::getRemaining(
'login_192.168.1.1', 5, 300
);
// 用途: 登录限流、API限流、搜索限流
CommentSpamService - 垃圾检测
use app\common\service\CommentSpamService;
// 检测是否为垃圾内容
$result = CommentSpamService::isSpam(
'这是一段评论内容',
'192.168.1.1'
);
// 返回: ['spam'=>false, 'reason'=>'']
// 检测: 重复内容、敏感词、链接过多等
CsrfService - CSRF防护
use app\common\service\CsrfService;
// 生成CSRF Token
$token = CsrfService::generateToken();
// 验证Token
$valid = CsrfService::verifyToken($token);
// 前端使用:
//
// $.ajax会自动添加_token参数
FileUploadService - 安全上传
use app\common\service\FileUploadService;
// 验证上传文件
$check = FileUploadService::validateUpload(
$filePath,
['jpg', 'png', 'gif'],
10485760 // 10MB
);
// 检查: 扩展名、文件大小、魔术字节
// 验证文件真实类型
$valid = FileUploadService::verifyMagicBytes(
$filePath, 'jpg'
);
// 防止伪装扩展名攻击
// 安全文件名
$safeName = FileUploadService::generateSafeFilename(
$originalName, 'jpg'
);
安全服务总览
PasswordService 密码安全
validateStrength() - 密码强度验证
hash() - bcrypt安全哈希
verifyAndUpgrade() - 验证并自动升级旧哈希
generateRandom() - 生成随机密码
RateLimitService 访问限流
check() - 检查是否超限
getRemaining() - 获取剩余次数
用途: 登录限流、API限流、搜索限流
CommentSpamService 垃圾检测
isSpam() - 检测垃圾内容
检测: 重复内容、敏感词、链接过多
CsrfService CSRF防护
generateToken() - 生成Token
verifyToken() - 验证Token
FileUploadService 安全上传
validateUpload() - 验证文件
verifyMagicBytes() - 验证真实类型
sanitizePath() - 路径安全
generateSafeFilename() - 安全文件名