← ClaudeAtlas

security-reviewlisted

审查代码安全性时使用。覆盖注入、认证、越权、敏感数据等常见风险。
Wade-DevCode/awesome-coding-skills-cn · ★ 3 · Code & Development · score 78
Install: claude install-skill Wade-DevCode/awesome-coding-skills-cn
# 安全审查 ## 何时用 - 新功能上线前做安全审查。 - 代码涉及用户输入处理、认证鉴权、数据库查询、文件操作时。 - 接到安全漏洞报告,需要定位和评估影响范围时。 - 引入第三方依赖或集成外部 API 前。 ## 核心规则 ### 1. 输入即不可信:防注入(SQL / 命令 / XSS) **规则:** 所有来自外部的数据(HTTP 参数、请求体、文件内容、消息队列、环境变量)默认不可信;SQL 查询用参数化语句,系统命令用参数列表而非字符串拼接,HTML 输出做转义。 **为什么:** AI 生成数据库查询时极容易回退到字符串拼接:`"SELECT * FROM users WHERE id=" + userId`。在 userId 为 `"1 OR 1=1"` 时整张表被泄露,为 `"1; DROP TABLE users--"` 时数据被删除。2023 年 OWASP Top 10 注入漏洞仍居首位,AI 代码贡献了相当比例的新增漏洞。 **怎么做:** ```python # 反例:字符串拼接 query = f"SELECT * FROM users WHERE name='{name}'" cursor.execute(query) # 正例:参数化查询 cursor.execute("SELECT * FROM users WHERE name = %s", (name,)) ``` ```python # 反例:os.system 拼接 os.system(f"ffmpeg -i {filename} output.mp4") # 正例:参数列表,不经 shell 解释 subprocess.run(["ffmpeg", "-i", filename, "output.mp4"], check=True) ``` - 前端输出用模板引擎的自动转义(如 Jinja2 的 `{{ var }}`),禁止用 `innerHTML = userInput`。 --- ### 2. 认证与会话:加盐哈希、有效期、防爆破 **规则:** 密码存储用 bcrypt/Argon2(禁用 MD5/SHA1/SHA256 直接哈希);session token 和 JWT 设置合理有效期并支持服务端撤销;登录接口做频率限制防爆破。 **为什么:** AI 实现用户注册时,最常见的错误是 `hashlib.sha256(password.encode()).hexdigest()` 存库。SHA256 无盐、速度极快,彩虹表或 GPU 暴力破解成本极低;一旦数据库泄露,大量账号密码几分钟内被还原。另一个常见问题:AI 生成的 JWT 不设 `exp` 字段,token 一旦泄露永久有效,撤销无从实现。 **怎么做:** ```python import bcrypt # 存储:自动加盐 hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt(rounds=12)) # 验证 bcrypt.checkpw(password.encode(), hashed) ``` ```python import jwt from datetime import datetime, timedelta, timezone token = jwt.encode({ "sub": user_id, "exp": datetime.now(timezone.u