内置规则
codescan 内置 40+ 条规则,涵盖六个类别。使用 codescan --list-rules 查看完整列表(包括已加载的自定义规则)。
SECRET — 硬编码密钥
| ID | 严重性 | 描述 |
|---|---|---|
| SECRET001 | error | 硬编码密码赋值 |
| SECRET002 | error | 通用密钥 / API 密钥赋值 |
| SECRET003 | error | AWS 访问密钥(AKIA...) |
| SECRET004 | error | AWS 秘密密钥 |
| SECRET005 | error | 通用 Bearer / Auth Token |
| SECRET006 | error | URL 中的 Basic Auth 凭证 |
| SECRET007 | error | 私钥 PEM 头部 |
| SECRET008 | error | GitHub 个人访问令牌 |
| SECRET009 | error | Slack Webhook URL |
| SECRET010 | error | Stripe 密钥 |
| SECRET011 | error | Stripe 可发布密钥 |
| SECRET012 | warning | Twilio 账户 SID |
| SECRET013 | warning | Twilio Auth Token |
| SECRET014 | error | Google API 密钥 |
| SECRET015 | error | SendGrid API 密钥 |
| SECRET016 | error | JWT Token 字面量 |
| SECRET017 | warning | 含凭证的数据库连接字符串 |
| SECRET018 | warning | SSH 私钥头部 |
| SECRET019 | warning | PGP 私钥头部 |
| SECRET020 | warning | 通用 token = "..." 赋值 |
| SECRET021 | warning | 通用 key = "..." 赋值 |
| SECRET022 | warning | 通用 secret = "..." 赋值 |
| SECRET023 | warning | Telegram Bot Token |
| SECRET024 | error | .npmrc 中的 npm Auth Token |
EXPLOIT — 漏洞模式
| ID | 严重性 | 描述 |
|---|---|---|
| EXPLOIT001 | error | 字符串拼接导致的 SQL 注入 |
| EXPLOIT002 | error | 字符串拼接导致的 OS 命令注入 |
| EXPLOIT003 | error | ../ 路径穿越 |
| EXPLOIT004 | error | eval() 不受信任输入 |
| EXPLOIT005 | error | Pickle / 不安全反序列化 |
| EXPLOIT006 | warning | XML 外部实体(XXE)— FEATURE_EXTERNAL_GENERAL_ENTITIES |
| EXPLOIT007 | error | 无 Loader 的 YAML load()(任意代码执行) |
| EXPLOIT008 | warning | 服务器端模板注入风险 |
| EXPLOIT009 | error | innerHTML / outerHTML 赋值(XSS) |
| EXPLOIT010 | error | document.write() 不受信任输入(XSS) |
| EXPLOIT011 | warning | 带变量的 exec() / execSync()(命令注入) |
| EXPLOIT012 | warning | 带 shell 选项的 child_process.spawn |
| EXPLOIT013 | warning | 不安全的 subprocess.Popen(shell=True) |
| EXPLOIT014 | warning | Python 2 中的 input()(代码执行) |
| EXPLOIT015 | warning | open() / 文件访问使用用户控制路径 |
| EXPLOIT016 | warning | 正则拒绝服务(ReDoS)模式 |
| EXPLOIT017 | warning | assert 语句中的硬编码凭证 |
| EXPLOIT018 | error | 通过 __proto__ 的原型污染 |
| EXPLOIT019 | warning | dangerouslySetInnerHTML(React XSS) |
| EXPLOIT020 | warning | 未转义用户输入导致的日志注入 |
| EXPLOIT021 | error | 原型污染赋值模式 |
| EXPLOIT022 | warning | 用户控制 URL 导致的未验证重定向 |
| EXPLOIT023 | warning | SSRF 风险 — 使用用户控制 URL 的 HTTP 请求 |
| EXPLOIT024 | warning | 批量赋值 / 用户输入的对象展开 |
CRYPTO — 密码学问题
| ID | 严重性 | 描述 |
|---|---|---|
| CRYPTO001 | warning | 使用 MD5 |
| CRYPTO002 | warning | 使用 SHA-1 |
| CRYPTO003 | error | 使用 DES / 3DES |
| CRYPTO004 | error | 使用 RC4 |
| CRYPTO005 | error | ECB 加密模式 |
| CRYPTO006 | warning | 弱 RSA 密钥长度(< 2048 位) |
| CRYPTO007 | error | 硬编码加密密钥或 IV |
| CRYPTO008 | error | 安全敏感场景使用 Math.random() |
| CRYPTO009 | error | 安全敏感场景使用 random.random() |
| CRYPTO010 | error | TLS/SSL 证书验证被禁用 |
| CRYPTO011 | warning | 使用 Blowfish 算法 |
UNICODE — Unicode 攻击
| ID | 严重性 | 描述 |
|---|---|---|
| UNICODE001 | error | 双向控制字符(Trojan Source,CVE-2021-42574) |
| UNICODE002 | warning | 代码中的零宽字符 |
| UNICODE003 | warning | 同形字符(西里尔文/希腊文外观相似字符) |
INFRA — 基础设施 / 配置
| ID | 严重性 | 描述 |
|---|---|---|
| INFRA001 | warning | 硬编码私有/RFC-1918 IP 地址 |
| INFRA002 | warning | 带安全隐患的 TODO/FIXME/HACK/XXX 注释 |
| INFRA003 | info | 遗留在代码中的调试/详细日志 |
| INFRA004 | info | 明文 HTTP URL(非 localhost) |
ENTROPY — 高熵字符串
| ID | 严重性 | 描述 |
|---|---|---|
| ENTROPY001 | warning | 密钥关键字附近的高熵字符串(Shannon 熵 ≥ 4.5 bits/char) |
禁用规则
bash
# CLI
codescan --skip-rules INFRA004,INFRA003 .
# codescan.toml
[rules]
disabled = ["INFRA004", "INFRA003"]覆盖严重性
toml
# codescan.toml
[rules.severity_overrides]
CRYPTO001 = "error"
INFRA004 = "warning"添加自定义规则
详见自定义规则,了解如何编写和加载自定义规则定义。