plugins/laravel/skills/financial-security-middleware/SKILL.md
资金操作防并发安全中间件模式. 当需要防止并发请求/竞争条件时, 使用此中间件模式设计多层防护方案. 适用于提现/转账/归集等资金类接口, 以及任何需要防重复提交的场景.
npx skillsauth add phpmac/skills financial-security-middlewareInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
本 skill 描述的是框架无关的多层防护方法论. 三层防御架构 (中间件拦截 -> 业务校验 -> 数据层保障) 的设计思路适用于任何 Web 框架.
当前 examples/ 目录下的示例基于 Laravel 框架 (Cache::lock, DB::transaction, lockForUpdate). 应用到其他框架时, 需替换为对应机制:
| 防护层 | Laravel | Next.js / Node.js | |--------|---------|-------------------| | HTTP并发锁 | Cache::lock (Redis) | Redis SETNX / Redlock | | 业务锁 | Cache::lock | Redis 分布式锁 | | 事务 | DB::transaction | Prisma $transaction / mongoose session | | 行锁 | lockForUpdate (MySQL) | MongoDB findOneAndUpdate / Prisma乐观锁 | | 参数校验 | $request->validate | zod / joi | | 身份验证 | 自定义 2FA | next-auth / middleware |
资金操作必须采用多层防护, 每层职责独立:
HTTP请求
|
├─ 第1层: 中间件 (HTTP层拦截)
│ ├─ IP白名单 (可选, 从配置读取)
│ ├─ 并发锁 (同一用户同时只能有一个请求)
│ └─ 频率限制 (可选)
│
├─ 第2层: 控制器/Handler (业务层校验)
│ ├─ 参数校验
│ ├─ 身份验证 (2FA等)
│ └─ 业务前置检查 (余额/状态)
│
└─ 第3层: 数据操作 (数据层保障)
├─ 分布式锁 (业务锁, 防重复处理)
├─ 数据库事务 (原子性)
└─ 行锁/乐观锁 (防并发修改)
同一用户同一时间只能有一个资金操作请求在处理. 使用 Cache::lock 在中间件层拦截.
实现要点:
{操作名}_concurrent_{user_id}FinancialOperationLockException, 返回 HTTP 429try/finally 释放锁, 防止异常路径死锁锁释放异常安全 (必须):
// 正确: try/finally 保证任何路径都释放
$lock = Cache::lock("{$operation}_concurrent_{$user->id}", 10);
throw_if(! $lock->get(), FinancialOperationLockException::class, $user->id, $operation);
try {
return $next($request);
} finally {
$lock->release();
}
// 错误: 异常时锁不释放, 导致死锁
$lock = Cache::lock("...", 10);
throw_if(! $lock->get(), '...');
$response = $next($request); // 若抛异常, release() 永不执行
$lock->release();
禁止 throw_if($cond, '裸字符串'). 资金/安全操作必须使用自定义异常类:
class FinancialOperationLockException extends Exception
{
public readonly array $context;
public function __construct(
public readonly int $userId,
public readonly string $operation,
) {
$this->context = [
'user_id' => $userId,
'operation' => $operation,
'ip' => request()->ip(),
'user_agent' => request()->userAgent(),
'url' => request()->fullUrl(),
];
parent::__construct(
"[并发锁定] [操作:{$operation}] "
. json_encode($this->context, JSON_UNESCAPED_UNICODE)
);
}
public function render(): JsonResponse
{
return response()->json([
'message' => '有请求正在处理中, 请稍后再试',
], 429);
}
}
异常设计规范:
render() 返回语义化 HTTP 状态码 (429/403 等), 不是默认 500适用于所有资金操作接口. 从应用配置中读取白名单, 任一应用配置了白名单则强制限制.
实现要点:
在 bootstrap/app.php 注册别名, 在路由文件挂载:
// bootstrap/app.php
$middleware->alias([
'financial' => FinancialOperationMiddleware::class,
]);
// routes/api.php
Route::post('/withdraw', [WithdrawController::class, 'withdraw'])
->middleware('financial:withdraw');
中间件交付 = 创建文件 + 注册别名 + 挂载路由, 缺一不可.
控制器负责业务级校验, 不重复中间件已做的检查.
$request->validate)三者配合使用, 缺一不可:
实现要点:
| 维度 | 中间件锁 | 控制器锁 | |------|----------|----------| | 作用 | 拒绝并发请求 (429) | 保证业务原子性 | | 锁粒度 | 用户级 | 业务级 | | 锁时长 | 请求处理期间 | 事务执行期间 | | 失败响应 | HTTP 429 | 业务错误信息 | | 是否必须 | 是 (防刷) | 是 (防并发) |
三层缺一不可. 中间件锁是第一道关卡, 但真正防并发要靠控制器+数据库层. 即使中间件锁被绕过 (如队列/命令行), 控制器和数据库层仍然能保证数据正确.
新增任何资金操作接口时, 必须确认:
examples/ 目录下的示例基于 Laravel 框架, 展示具体实现方式:
@examples/middleware.php: 中间件完整实现 (并发锁 + try/finally + 自定义异常)@examples/exception.php: 自定义异常完整实现 (自动请求上下文 + render 429)@examples/controller.php: 控制器数据操作层实现 (业务锁 + 事务 + 行锁)@examples/route.php: 路由注册方式 (financial:withdraw 参数用法)@examples/test.php: 并发控制测试用例 (虚拟路由隔离 + 异常路径)应用到其他框架时, 将 Laravel 特定 API 替换为对应实现即可, 方法论不变.
app/Http/Middleware/FinancialOperationMiddleware.phpapp/Exceptions/FinancialOperationLockException.phpapp/Http/Controllers/WithdrawController.phptests/Feature/FinancialOperationMiddlewareTest.phpdata-ai
当用户提到 Linux 提权/本地提权/local privilege escalation/获取root权限/内核漏洞利用/LPE/SUID/sudo滥用/容器逃逸/权限提升检测; 或要求在Linux系统上从普通用户提升到root权限; 或查询CVE提权漏洞(如Dirty Pipe/CopyFail/Dirty Frag/PwnKit/Looney Tunables); 或需要安全加固建议时应使用此技能
tools
当用户要求 "计算仓位", "仓位管理", "止损比例", "凯利公式", "盈亏比", "资金管理", "半凯利", "反马丁格尔", "固定风险", "position sizing", "策略评估", "策略体检", "SQN", "夏普比率", "卡玛比率", "期望值", "获利因子", "MAE", "MFE", "R乘数", "索提诺", "蒙特卡洛", "样本外测试", "策略回测" 或需要计算合约交易的最优仓位/止损/资金分配/策略质量评估时应使用此技能. 覆盖仓位管理/策略评估/交易解剖/压力测试的完整框架. 即使用户只是提到 "这笔交易该下多少", "策略好不好", "复盘怎么算" 等模糊描述也应触发.
development
当用户要求 "提取API", "逆向APK", "分析APP接口", "提取业务端点", "React Native逆向", "Flutter逆向" 或需要从移动应用提取后端API信息时使用此技能. 覆盖APK解包/JS bundle分析/kernel_blob.bin分析/H5页面参数发现/Spring Boot API验证全流程. 支持React Native和Flutter两种框架.
research
当用户要求 "推荐VPS", "选服务器", "对比服务商", "建站VPS", "便宜VPS", "VPS推荐" 或需要研究/筛选/对比VPS服务商时应使用此技能. 从 hostloc/lowendtalk/lowendbox/测评站搜集真实评测数据, 交叉验证后给出可溯源排名.