Rust Service Security
Use this skill when a Rust service handles identity, credentials, sessions,
cookies, privileged routes, or sensitive user data. Prefer explicit threat
checks and tests over optimistic handler code.
Core Workflow
- Identify the protected asset: account access, admin area, session state,
password change, reset token, private data, or privileged operation.
- Trace the whole flow: request parsing, credential lookup, verification,
session mutation, redirects/responses, logs, and tests.
- Keep secrets out of logs and debug output. Use secret wrappers for passwords,
tokens, signing keys, and session secrets.
- Run password hashing and verification with memory-hard algorithms and move
CPU-heavy work off async reactor threads.
- Prevent user enumeration. Failed login and password reset flows should not
reveal whether the account exists.
- Set cookie and session attributes deliberately:
HttpOnly, Secure,
SameSite, path, lifetime, signing/encryption, and store backend.
- Protect routes at middleware or extractor boundaries, not by repeating
ad-hoc checks in every handler.
- Add tests for happy path, failed auth, missing session, forged cookie or
token, and logout/session rotation behavior.
Password Rules
Read references/password-auth.md before implementing or changing password
storage or verification.
- Store PHC strings produced by Argon2id or the project's chosen password
hasher; never store plaintext or reversible encrypted passwords.
- Generate salts with a secure RNG.
- Use constant, generic responses for invalid credentials.
- Use
tokio::task::spawn_blocking or a dedicated blocking abstraction for
expensive password operations.
- Keep password hash parameters configurable enough to upgrade over time.
Cookie And Session Rules
Read references/cookies-sessions.md when setting, reading, deleting, signing,
or persisting cookies and sessions.
- Never store raw credentials in cookies.
- Prefer opaque session IDs backed by a server-side store for privileged apps.
- Rotate or renew session state after login and privilege changes.
- Delete sessions server-side on logout when using a server-side store.
- Test security attributes on
Set-Cookie headers.
Route Protection
Read references/auth-middleware.md when adding admin routes, extractors,
guards, or framework middleware.
Keep handlers typed:
pub async fn admin_dashboard(user: AuthenticatedUser) -> Result<HttpResponse, AppError> {
// Handler can assume authentication succeeded.
Ok(HttpResponse::Ok().finish())
}
Avoid optional user lookups in handlers that require authentication; make the
missing-user case impossible at the handler signature when the framework allows
it.
Reference Files
references/password-auth.md: Argon2, PHC strings, user enumeration, and
blocking password work.
references/cookies-sessions.md: cookie flags, signed messages, server-side
sessions, and logout.
references/auth-middleware.md: route guards, extractors, and typed session
access.
Source: hashgraph-online/awesome-codex-plugins → plugins/LVTD-LLC/skills/skills/rust-service-security/SKILL.md
1---2name: rust-service-security3description: Use when adding, changing, testing, or reviewing security-sensitive Rust web service behavior, especially login flows, password hashing, credential checks, session cookies, flash messages, admin route protection, auth middleware, user enumeration defenses, or moving CPU-heavy password work off async executors.4---567# Rust Service Security89Use this skill when a Rust service handles identity, credentials, sessions,10cookies, privileged routes, or sensitive user data. Prefer explicit threat11checks and tests over optimistic handler code.1213## Core Workflow14151. Identify the protected asset: account access, admin area, session state,16 password change, reset token, private data, or privileged operation.172. Trace the whole flow: request parsing, credential lookup, verification,18 session mutation, redirects/responses, logs, and tests.193. Keep secrets out of logs and debug output. Use secret wrappers for passwords,20 tokens, signing keys, and session secrets.214. Run password hashing and verification with memory-hard algorithms and move22 CPU-heavy work off async reactor threads.235. Prevent user enumeration. Failed login and password reset flows should not24 reveal whether the account exists.256. Set cookie and session attributes deliberately: `HttpOnly`, `Secure`,26 `SameSite`, path, lifetime, signing/encryption, and store backend.277. Protect routes at middleware or extractor boundaries, not by repeating28 ad-hoc checks in every handler.298. Add tests for happy path, failed auth, missing session, forged cookie or30 token, and logout/session rotation behavior.3132## Password Rules3334Read `references/password-auth.md` before implementing or changing password35storage or verification.3637- Store PHC strings produced by Argon2id or the project's chosen password38 hasher; never store plaintext or reversible encrypted passwords.39- Generate salts with a secure RNG.40- Use constant, generic responses for invalid credentials.41- Use `tokio::task::spawn_blocking` or a dedicated blocking abstraction for42 expensive password operations.43- Keep password hash parameters configurable enough to upgrade over time.4445## Cookie And Session Rules4647Read `references/cookies-sessions.md` when setting, reading, deleting, signing,48or persisting cookies and sessions.4950- Never store raw credentials in cookies.51- Prefer opaque session IDs backed by a server-side store for privileged apps.52- Rotate or renew session state after login and privilege changes.53- Delete sessions server-side on logout when using a server-side store.54- Test security attributes on `Set-Cookie` headers.5556## Route Protection5758Read `references/auth-middleware.md` when adding admin routes, extractors,59guards, or framework middleware.6061Keep handlers typed:6263```rust64pub async fn admin_dashboard(user: AuthenticatedUser) -> Result<HttpResponse, AppError> {65 // Handler can assume authentication succeeded.66 Ok(HttpResponse::Ok().finish())67}68```6970Avoid optional user lookups in handlers that require authentication; make the71missing-user case impossible at the handler signature when the framework allows72it.7374## Reference Files7576- `references/password-auth.md`: Argon2, PHC strings, user enumeration, and77 blocking password work.78- `references/cookies-sessions.md`: cookie flags, signed messages, server-side79 sessions, and logout.80- `references/auth-middleware.md`: route guards, extractors, and typed session81 access.8283---8485**Source:** [`hashgraph-online/awesome-codex-plugins`](https://github.com/hashgraph-online/awesome-codex-plugins) → `plugins/LVTD-LLC/skills/skills/rust-service-security/SKILL.md`