该技能是 Elixir/Phoenix 的安全模式速查参考,用于在开发与加固阶段处理认证和安全相关问题,包括 OAuth 登录、密码哈希、会话、RBAC、限流、CSRF、XSS、SQL 注入与密钥管理。
核心原则:在边界处校验,所有数据经 changeset 处理;绝不拼接用户输入,使用 Ecto 的 ^ 参数化操作符;禁止用 String.to_atom 处理用户输入(原子耗尽 DoS),改用 to_existing_atom/1;处处授权,在 context 与 LiveView 事件中都校验;默认转义,不对不可信内容使用 raw/1;密钥不写入代码,全部放 runtime.exs 并取自环境变量;LiveView 事件参数不可信,DevTools 可改表单、hook 及所有 phx-value-*,需基于服务端状态校验授权。
示例能力:用 Argon2.verify_pass 与 no_user_verify 实现时序安全认证;在 handle_event 中用 Bodyguard.permit 重新授权,不依赖 mount 已授权;SQL 用 from(u in User, where: u.name == ^user_input) 防注入。校验范围包括用户输入、文件上传(扩展名+magic bytes+大小)、路径(Path.safe_relative/2 防穿越)、原子。
使用方式:作为参考技能,详细模式分散在 references 目录,如 authentication.md(phx.gen.auth、MFA、会话)、authorization.md(Bodyguard、scopes、LiveView 授权)、input-validation.md、security-headers.md(CSP、CSRF、限流、头部)、oauth-linking.md、rate-limiting.md(复合键、Hammer)、advanced-patterns.md(SSRF、密钥管理、供应链)。
限制:Ash 项目应改用 ash-framework 技能(AshAuthentication 有独立策略与令牌模式),但 CSRF、XSS 和密钥管理仍适用。具体版本要求、收费与平台信息暂未提供。