From elixir-phoenix
Enforces Elixir/Phoenix security patterns for auth, OAuth, sessions, CSRF, XSS, SQL injection, input validation, and secrets. Activates when editing auth files, login flows, RBAC, or API keys.
How this skill is triggered — by the user, by Claude, or both
Slash command
/elixir-phoenix:securityThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Quick reference for security patterns in Elixir/Phoenix.
Quick reference for security patterns in Elixir/Phoenix.
^ operator, never string interpolationto_existing_atom/1raw/1 with untrusted contentruntime.exs from env varsdef authenticate(email, password) do
user = Repo.get_by(User, email: email)
cond do
user && Argon2.verify_pass(password, user.hashed_password) ->
{:ok, user}
user ->
{:error, :invalid_credentials}
true ->
Argon2.no_user_verify() # Timing attack prevention
{:error, :invalid_credentials}
end
end
# RE-AUTHORIZE IN EVERY EVENT HANDLER
def handle_event("delete", %{"id" => id}, socket) do
post = Blog.get_post!(id)
# Don't trust that mount authorized this action!
with :ok <- Bodyguard.permit(Blog, :delete_post, socket.assigns.current_user, post) do
Blog.delete_post(post)
{:noreply, stream_delete(socket, :posts, post)}
else
_ -> {:noreply, put_flash(socket, :error, "Unauthorized")}
end
end
# ✅ SAFE: Parameterized queries
from(u in User, where: u.name == ^user_input)
# ❌ VULNERABLE: String interpolation
from(u in User, where: fragment("name = '#{user_input}'"))
Path.safe_relative/2 for traversalString.to_existing_atom/1 only<%= %>)raw/1 with untrusted content| Wrong | Right |
|---|---|
"SELECT * FROM users WHERE name = '#{name}'" | from(u in User, where: u.name == ^name) |
String.to_atom(user_input) | String.to_existing_atom(user_input) |
<%= raw @user_comment %> | <%= @user_comment %> |
| Hardcoded secrets in config | runtime.exs from env vars |
| Auth only in mount | Re-auth in every handle_event |
For detailed patterns, see:
${CLAUDE_SKILL_DIR}/references/authentication.md - phx.gen.auth, MFA, sessions${CLAUDE_SKILL_DIR}/references/authorization.md - Bodyguard, scopes, LiveView auth${CLAUDE_SKILL_DIR}/references/input-validation.md - Changesets, file uploads, paths${CLAUDE_SKILL_DIR}/references/security-headers.md - CSP, CSRF, rate limiting, headers${CLAUDE_SKILL_DIR}/references/oauth-linking.md - OAuth account linking, token management${CLAUDE_SKILL_DIR}/references/rate-limiting.md - Composite key strategies, Hammer patterns${CLAUDE_SKILL_DIR}/references/advanced-patterns.md - SSRF prevention, secrets management, supply chainnpx claudepluginhub oliver-kriska/claude-elixir-phoenix --plugin elixir-phoenixEnforces Elixir/Phoenix security rules for auth, tokens, redirects, user input: prevents atom exhaustion, SQL injection via Ecto fragments, open redirects. Invoke before security-sensitive code.
Guides application security reviews and implementation covering OWASP Top 10, input validation, auth, secrets management, and antipatterns.
Provides examples, walkthroughs, official guides, and plugin-specific patterns for Phoenix, LiveView, Ecto, and OTP. Use for 'how do I...', 'show me an example', or 'what does X look like' queries.