关于 elixir-security-review
面向 Elixir 代码的安全审查技能,按严重、主要和配置问题组织检查项。它强调结合上下文判断,并要求报告问题前核实代码位置与依据。
主要功能
- 01代码注入与不安全 term 检查
- 02Atom 耗尽风险检查
- 03密钥与配置检查
- 04ETS 和进程数据检查
- 05基于上下文的审查门槛
适用场景
- 01合并前审查 Elixir 代码
- 02检查外部输入处理
- 03审计密钥与运行时配置
- 04结合源码上下文核实问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill elixir-security-review安装后在 Claude Code 中输入/elixir-security-review确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/atom-exhaustion.mdcode-injection.mdprocess-exposure.md详细介绍
Elixir 安全审查
快速参考
| 问题类型 | 参考资料 |
|---|---|
| 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 表采用适当的访问控制
- 进程字典中没有敏感数据
- 不根据用户输入动态创建模块
- 文件操作中已防止路径遍历
配置
- 从环境变量加载机密信息
- 没有将 config/*.exs 中的机密信息提交到 git
- 部署机密信息使用运行时配置
有效模式(不要标记)
- 对编译时常量使用 String.to_atom - 编译时创建的原子是安全的
- 在 dev/test 中使用 Code.eval_string - 工具可能需要此功能
- ETS :public 表 - 有意共享时是有效的
- 使用 :safe 的 binary_to_term - 使用了明确的安全选项
上下文相关规则
| 问题 | 仅在以下情况下标记 |
|---|---|
| String.to_atom | 输入来自外部来源(用户、API、文件) |
| binary_to_term | 数据来自不可信来源 |
| ETS :public | 包含敏感数据 |
硬性门槛(报告前)
对计划报告的每项发现,按顺序完成以下步骤。通过条件满足前不得继续。
- 位置依据 — 发现中包含
[FILE:LINE](或行范围),且该位置是从当前文件内容中复制的;路径在此仓库中有效。 - 读取相关范围 — 阅读包含被标记代码的完整函数或模块片段,而不只是差异片段或摘要。
- 外部数据依据(仅当发现依赖于“用户/不可信输入”时)— 能指出一个具体的入口(例如
conn.params、Jason.decode!/1的结果、上传的文件路径、来自另一个节点的消息),或者根据上下文相关规则,如果该值是编译时、仅用于测试或内部数据,则放弃该发现。 - 协议 — 此项满足 review-verification-protocol 中报告前的步骤(若未满足,则不报告发现)。
提交发现前
每项发现使用以下格式:[FILE:LINE] ISSUE_TITLE。
硬性门槛 4 要求遵循 review-verification-protocol;请将其作为完整的报告前检查清单和问题类型核验流程(其范围超出此技能摘要)。
评论
支持 Markdown