一条短视频让我审计自己的招聘站:29 美元的岗位能一分钱买到
来源:dev.to — 2026-11-06
📋 概述
作者运营的 GiggleGigs 是 Django 加 DRF 后端、React 前端、Celery 加 PayPal 收款,跑在一台 2GB 的 DigitalOcean 机器上。他看了条讲 RLS 的短视频后意识到自己不用 RLS 不代表没权限问题,于是逐个端点问「谁有权看或做这件事,代码真的检查了吗」,再让 AI 复审——结果 AI 找出他自己漏掉的最严重一处:捕获支付时只用 order_id 去 capture,从不校验订单由谁创建、金额是多少。而 PayPal 的 client ID 是公开的,任何人都能在自己浏览器里下一分钱的单,拿它的 ID 去换一个 29 美元的岗位发布。订阅同样可被冒领:付 49 美元的套餐却能激活 99 美元的档位,甚至提交别人的订阅 ID。
🔑 核心要点
- 捕获前必须自己重建订单该有的样子:reference_id 对不对、币种是不是 USD、金额是否等于报价(含优惠码)。
- amount_paid 要记 PayPal 实际收的钱,而不是套餐标价,否则数据库里留下假证据。
- 订阅方案必须校验 PayPal 返回的 plan_id 与要激活的档位一致。
- 归属校验靠 custom_id 里的公司 ID;优惠码部分用 Django Signer 签名,浏览器伪造的会被忽略。
💡 金句
“Pay $0.01, get a $29 listing.”
译:付一分钱,拿走一个标价 29 美元的岗位发布位。
👍 0
👎 0
← 返回 dev.to 首页