交互式安全编码培训,提供动手实操的 SCORM 练习,涵盖 OWASP Top 10 Web 与 API 漏洞、Git/敏感信息泄露,以及 10 多种语言的修复示例。
40 个免费的开源安全编码练习,以开发者学习的方式教授 Web 应用安全 — 通过利用真实漏洞(如 SQL 注入、跨站脚本 (XSS) 和失效的访问控制),然后编写修复代码。互动式 SCORM 模块涵盖 OWASP Top 10 Web、API、Git 仓库安全等更多内容。修复示例使用 JavaScript、TypeScript、Java、C#、Python、Scala、PHP、Ruby、Go 和 Kotlin。

👥 联系创始人 | 🔗 浏览完整学习库 | 🎮 体验实时 DOM XSS 演示
每年读一次 OWASP Top 10 并通过一次选择题测验并不能阻止生产环境中的 Web 应用漏洞。开发者需要亲眼看到真实攻击能做什么 — SQL 注入转储数据库、跨站脚本劫持会话、失效的访问控制泄露其他用户的数据 — 然后编写能够阻止这些问题的安全代码。
本学习库中的每个练习都遵循三阶段方法论:利用 (exploit)、追踪 (trace)、修复 (remediate)。
你会对一个故意存在漏洞的应用进行动手渗透测试 — 对数据库执行 SQL 注入、在浏览器中触发 XSS、利用 SSRF 访问云元数据端点 — 然后精确追踪漏洞是如何被引入的,并应用安全编码最佳实践进行修复。
练习涵盖:
每个练习最后都有一个要求 100% 通过率的测验。当开发者开始编写生产代码时,他们已经利用过每一种常见的 Web 应用漏洞,并掌握能够防范这些漏洞的安全编码最佳实践。
每个练习均以 SCORM 1.2 .zip 形式提供 — 可导入任何 LMS(Moodle、SAP SuccessFactors、Cornerstone、TalentLMS 或任何符合 SCORM 标准的系统),嵌入你的 SDLC 培训流程,或在上线前在 SCORM Cloud 上预览。
白标 — 无 Logo、无反向链接、无供应商锁定。可将其用于 DevSecOps 计划、安全 SDLC 计划的一部分,或作为独立的应用安全培训。
采用 Creative Commons Attribution-NonCommercial 4.0 International 许可证。你可以在注明出处的前提下,将内容用于任何非商业目的 — 内部培训、工作坊、大学课程。不允许将内容作为独立产品转售。
需要在不自行运行 LMS 的情况下进行大规模安全编码培训?我们提供 企业云平台,专为跨工程团队的应用安全培训而构建。联系我们 查看实际效果。
从底层开始便是多租户设计 — 通过单一管理界面为你的整个客户组合交付应用安全培训:
感兴趣?联系我们
点击劫持 — 通过覆盖透明 iframe 窃取银行审批按钮上的点击,获得真实审批,并部署 CSP frame-ancestors。
命令注入 — 通过篡改捕获的请求,在服务端工具上串联第二条命令,观察服务器机密泄露,并部署参数列表执行方式。
含有已知漏洞的组件 — 通过利用已公开的 CVE,借助精心构造的上传执行命令,升级组件版本并在 CI 中扫描,从而通过过时的库获得代码执行。
跨站请求伪造 (CSRF) — 通过自动提交跨站转账,从受害者从未信任的页面转移资金,了解 cookie 为何会随请求发送,并添加每会话令牌和 SameSite。
目录遍历 — 通过下载链接读取系统文件:逃逸预期目录,从服务器拉取 /etc/passwd,并进行路径规范化后验证。
DOM XSS — 通过将载荷隐藏在 URL hash 中,触发服务器永远看不到的 XSS,追踪不安全的 innerHTML sink,并改用 textContent。
强制浏览 — 通过匿名访问内部 URL,从未被链接到的路由提取员工 PII 导出文件,了解为什么混淆不等于访问控制,并在服务端强制实施身份验证。
水平越权 — 通过从两侧遍历 IDOR、枚举连续记录 ID,并添加缺失的所有权检查,仅修改一个数字即可读取另一个客户的数据。
Host 头注入 — 通过伪造 X-Forwarded-Host 头,将密码重置邮件重定向到仿冒域名,窃取被点击的重置令牌,并固定配置的基准 URL。
不安全的 URL 重定向 — 通过滥用 next 参数,将钓鱼页面隐藏在真实登录背后,了解为什么域名看起来正确,并只允许相对目标。
遗留的调试代码 — 通过查找转储环境变量的端点,读取 JWT 和数据库机密,并以白名单方式默认拒绝,从被遗忘的调试路由中提取生产机密。
URL 中的 PII — 通过识别查询字符串中的标识符,追踪其泄露到日志和 referrer 的过程,并改写为不透明令牌,直接从链接中提取个人数据。
反射型 XSS — 通过利用搜索页面反射载荷,理解受害者点击链接的流程,并在渲染边界进行转义,构造一个打开即执行的恶意 URL。
失效的功能级授权 — 通过以分析师身份访问管理员路由、拉取名册并排队进行付款,再从只读账户调用仅限员工使用的端点,并添加路由级角色守卫。
失效的对象级授权 — 通过修改请求中的对象 ID、遍历 ID 批量获取记录,并强制实施每对象所有权,替换一个 ID 即可读取另一位骑手的信息。
失效的用户身份认证 — 通过攻击无限制的验证端点,暴力破解六位登录代码,仅凭一个邮箱即可接管账户,并使用 429 对每个账户进行速率限制。
过度数据暴露 — 通过对比渲染后的页面与原始 JSON,读取 UI 从不显示的字段,发现电话号码、出生日期和坐标,并仅序列化字段白名单。
不当的资产管理 — 通过将 v2 替换为已弃用的 v1,绕过新版本强制实施的控制,并以 410 Gone 淘汰旧版本,从而通过已停用的 API 版本读取记录。
注入 — 通过逃逸目录查询、UNION 转储 users 表,并进行参数化使输入始终保持为数据,将搜索框变成完整的数据库读取入口。
日志记录和监控不足 — 通过访问一条没有工单的记录来查询客户且不留下痕迹,了解为什么无人能追溯该操作,并添加审计记录和告警。
批量赋值 — 通过向 PATCH 请求体添加字段,写入你不应拥有的属性,并仅绑定可编辑字段,用两个多余键即可凭空增加忠诚度余额。
安全配置错误 — 通过反射任意 CORS 来源、利用诱饵页面,并将 CORS 锁定为白名单,从任何网站读取已登录账户。
不受限制的资源消耗 — 通过从请求中设置页面大小、一次性拉取 250,000 条记录,并在服务端限制页面大小上限,用单个超大请求抓取整个目录。
Git 历史中的机密 — 通过翻阅已清理配置文件的历史提交,恢复一个仍可用的 API 密钥 — 该密钥在移除它的提交之前一直有效且从未轮换;然后先轮换密钥,再使用 git filter-repo 擦除。
暴露的 .git 目录 — 通过在 Web 根目录发现可浏览的 .git,转储仓库并恢复源代码,从而仅凭一个公开 URL 重建整个代码库;改为部署构建产物而非仓库。
已提交的机密文件 — 克隆公开仓库并读取其中已提交的 .env:识别自首次提交以来就被跟踪的机密文件,使用 git rm --cached 取消跟踪并轮换密钥,同时添加 .gitignore 和 pre-commit 钩子。
提交作者伪造 — 通过从 git log 收集作者身份、读取 Unverified(未验证)签名徽章,并强制要求所有贡献者(包括管理员)使用签名提交,从而以维护者的名义植入后门。
绕过分支保护 — 通过在未受保护的分支上重写历史,强制推送覆盖 main 分支并跳过审查和 CI,将未经审查的代码直接发布到生产环境;应要求拉取请求、审查者与检查。
泄露的访问令牌 — 通过检查权限过大的令牌能访问到什么,使用来自公开 gist 的令牌克隆私有仓库;不要仅删除 gist,而应撤销并轮换令牌,并重新签发细粒度、短时有效的令牌。
恶意拉取请求 — 通过阅读完整 diff 而非描述,发现隐藏在看似友好的测试修复中的后门,标记对部署脚本的超范围修改,并使用 CODEOWNERS 和 fork 限制强化审查。
CI/CD 机密暴露 — 通过找出会回显机密的 workflow 步骤,直接从公开构建日志中提取部署密钥;阻止不受信任的输入作为 shell 命令执行,并按提交 SHA 固定 action 版本、轮换密钥。
服务端请求伪造 (SSRF) — 通过滥用链接预览功能,访问元数据端点,并验证出站目标,让服务器获取自己的云凭证。
会话固定 — 通过在受害者身上固定已知会话 ID,观察登录时复用该 ID,并在每次登录时重新生成,从而实现植入会话 ID 并继承受害者登录状态。
SQL 注入 — 通过利用恒真 (tautology) 载荷、使用 UNION SELECT 窃取表数据,并部署参数化修复方案,经由一个疏于防护的查询表单转储整个数据库。
存储型 XSS — 通过将载荷存储在用户内容中,使其在下一位访问者访问时执行,并在渲染时对输出进行转义,从而在评论中植入脚本并观察其触发。
URL 中的令牌暴露 — 通过捕获重定向 URL 中的令牌,将其重放到真实账户中,并移动到 HttpOnly cookie,重放从 referrer 日志中收集的会话令牌。
用户枚举 — 通过读取不同的错误响应主体、测量响应时间泄露,并统一错误信息和响应时间,从登录表单收集经过验证的客户列表。
垂直越权 — 通过篡改会话令牌、从查看者跃升为管理员,并在信任前验证令牌,伪造角色声明并成为管理员。
弱随机性 — 通过对生成器采样令牌、恢复 Math.random() 状态,并改用 crypto.randomBytes,预测密码重置令牌并接管账户。
XXE 注入 — 通过提交精心构造的采购订单、解析外部实体,并禁用实体解析,通过 XML 上传读取密码文件。