PHP 框架特定安全审计
框架识别决策表
| 识别特征 | 框架 | 深入参考 |
|---|---|---|
composer.json → laravel/framework |
Laravel | references/laravel-patterns.md |
composer.json → topthink/framework |
ThinkPHP | references/thinkphp-patterns.md |
存在 wp-content/ 目录或 wp-config.php |
WordPress | references/wordpress-patterns.md |
composer.json → symfony/framework-bundle |
Symfony | 本文简要覆盖 |
composer.json → yiisoft/yii2 |
Yii2 | 本文简要覆盖 |
composer.json → codeigniter4/framework |
CodeIgniter | 本文简要覆盖 |
Laravel 核心检查点
- Mass Assignment --
$fillable/$guarded是否正确配置,Model::create($request->all())或update($request->all())是否存在未过滤字段 - Blade XSS -- 搜索
{!! !!}未转义输出、@php指令内直接 echo、自定义 Blade Directive 未调用e() - CSRF 例外 --
VerifyCsrfToken中间件$except数组是否包含敏感路由,API 路由组默认不含 CSRF 中间件 - Gate / Policy -- 控制器方法是否调用
$this->authorize()或Gate::allows(),Policy 定义是否覆盖所有 CRUD - Eloquent Raw --
whereRaw/havingRaw/orderByRaw/DB::raw中是否存在变量拼接 - 签名 URL / 调试 --
APP_DEBUG=true残留、.envWeb 可达、Telescope / Debugbar 路由暴露
ThinkPHP 核心检查点
- 历史 RCE 路由 -- TP5.x
method()覆盖、Request类__construct任意方法调用 - 缓存文件写入 -- 缓存文件路径可预测 + 内容可控 → 写入 WebShell
- 数据库 where 注入 --
where数组条件中exp/like/between表达式注入、Db::raw - Session 反序列化 -- TP6 session 序列化驱动可能触发 POP 链
- 模板注入 --
{php}标签、变量函数{:system()}
WordPress 核心检查点
- 插件 action/filter --
wp_ajax_nopriv_*钩子暴露未认证操作、Shortcode 回调参数注入 - $wpdb->prepare 缺失 -- 直接拼接 SQL 到
$wpdb->query() - nonce 验证 -- 表单处理 / AJAX handler 缺少
wp_verify_nonce/check_admin_referer - REST API --
register_rest_route的permission_callback是否为__return_true或缺失 - 文件上传 -- 插件自定义上传逻辑绕过
wp_handle_upload的 MIME 检查
Symfony 简要概述
- Debug 模式 --
APP_DEBUG=1泄露 Profiler / Web Debug Toolbar,暴露环境变量和 SQL - YAML 反序列化 -- 低版本
Yaml::parse支持!!php/object标签导致对象注入 - Security Voter -- 自定义 Voter 逻辑缺陷或
ACCESS_ABSTAIN误用导致越权
Yii2 简要概述
- RBAC 配置 --
DbManager权限项分配不当、checkAccess调用缺失导致垂直越权 - ActiveRecord 注入 --
findBySql/where条件字符串拼接、orderBy未过滤
CodeIgniter 简要概述
- 全局 XSS 过滤 -- CI3
$config['global_xss_filtering']已弃用,CI4 需手动调用esc() - CSRF Token -- 配置
CSRFProtection但排除路由过多、Token 重生策略不当
深入参考
- Laravel 审计模式
- ThinkPHP 审计模式
- WordPress 审计模式