Elixir Security Review 是一个用于审查 Elixir 代码安全性的技能,重点识别代码注入、原子耗尽、密钥处理与进程暴露等问题。
用途 该技能适用于对 Elixir 代码进行安全审查,尤其是当代码涉及用户输入处理时。技能说明中明确其使用时机为“reviewing code handling user input”。
主要能力 技能提供了以下参考主题与对应问题类型:
- Code.eval_string、binary_to_term —— 参见 references/code-injection.md
- String.to_atom 的危险 —— 参见 references/atom-exhaustion.md
- 配置、环境变量 —— 参见 references/secrets.md
- ETS 可见性、进程字典 —— 参见 references/process-exposure.md
审查清单 技能给出分级的审查清单。 关键项(应阻断合并):
- 不得对用户输入使用 Code.eval_string/1
- 不得在未受信任数据上使用不带 :safe 的 :erlang.binary_to_term/1
- 不得对外部输入使用 String.to_atom/1
- 不得在源代码中硬编码密钥 主要项:
- ETS 表使用适当的访问控制
- 进程字典中不得存放敏感数据
- 不得根据用户输入动态创建模块
- 文件操作中防止路径遍历 配置项:
- 密钥从环境加载
- 提交到 git 的 config/*.exs 中不含密钥
- 部署密钥使用运行时配置
合法模式(不应标记) 技能列出了不应误报的合法模式:
- 对编译期常量使用 String.to_atom —— 编译期创建的原子是安全的
- 在开发/测试中使用 Code.eval_string —— 工具用途可能必要
- ETS :public 表 —— 有意共享时有效
- 带 :safe 的 binary_to_term —— 显式使用了安全选项
上下文相关规则 技能给出了仅在特定条件下才标记的规则:
- String.to_atom:仅当输入来自外部来源(用户、API、文件)时标记
- binary_to_term:仅当数据来自不受信任来源时标记
- ETS :public:仅当包含敏感数据时标记
硬性门槛(报告前) 对于每个打算报告的问题,需按顺序完成以下步骤,未满足通过条件前不得推进:
- 位置工件 —— 问题需包含从当前文件内容中复制的 [FILE:LINE](或行范围);路径在该仓库中可解析。
- 作用域阅读 —— 需阅读包含被标记代码的完整周边函数或模块段落,而非仅查看 diff 片段或摘要。
- 外部数据声明(仅当问题依赖“用户/不受信任输入”时)—— 需能指出一个具体入口(例如 conn.params、Jason.decode!/1 结果、上传文件路径、来自另一节点的消息),否则根据上下文相关规则,若该值为编译期、仅测试或内部值,则放弃该问题。
- 流程 —— 该条目需满足 review-verification-protocol 中的报告前步骤(若不满足则不出问题)。
提交问题前 使用问题格式:[FILE:LINE] ISSUE_TITLE。 硬性门槛 4 要求使用 review-verification-protocol;将其作为完整的报告前清单与问题类型验证(其范围超出本技能摘要)。
适用场景 适用于对 Elixir 代码进行安全审查,特别是涉及用户输入处理的场景。
限制 技能文档本身未提供关于收费、价格、平台或效果的信息。使用前需满足文档中列出的硬性门槛与流程要求;技能的具体参考文档内容未在提供资料中展开。