php-session-auth

php-session-auth is a skill for Claude Code from maludb-ed/htmx-php-builder. It costs 56 tokens per session (1,923 once invoked), scanned A, original, MIT.

A security guide for login, registration, logout, and session handling in framework-free PHP applications. It covers password storage, CSRF protection, secure sessions, lockouts, and preventing user-account leaks.

In plain words
What is it for?
Use it when building or reviewing vanilla PHP authentication with password hashing, normalized emails, CSRF-protected forms, session renewal, and brute-force defenses.
Why use it?
It addresses common weaknesses in hand-built authentication, such as weak password handling, session fixation, missing request protection, and unlimited login attempts.

Skill for Claude Code

Written for Claude Code: shipped in a Claude Code plugin.

Part of the htmx-php-builder plugin — 9 skills shipped together

Good fit Use it when building or reviewing vanilla PHP authentication with password hashing, normalized emails, CSRF-protected forms, session renewal, and brute-force defenses.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/maludb-ed/htmx-php-builder/php-session-auth
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add maludb-ed/htmx-php-builder --skill php-session-auth
Clone the repo
git clone --depth 1 https://github.com/maludb-ed/htmx-php-builder

Made for: Claude Code.

Or install htmx-php-builder, the plugin that ships this one along with the rest of its 9 skills.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for php-session-auth

README.md
[![agentmods](https://agentmods.dev/badge/skills/maludb-ed/htmx-php-builder/php-session-auth/github.svg)](https://agentmods.dev/skills/maludb-ed/htmx-php-builder/php-session-auth)
Your own site
<a href="https://agentmods.dev/skills/maludb-ed/htmx-php-builder/php-session-auth"><img src="https://agentmods.dev/badge/skills/maludb-ed/htmx-php-builder/php-session-auth/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for php-session-auth

Your own site · 80×15
<a href="https://agentmods.dev/skills/maludb-ed/htmx-php-builder/php-session-auth"><img src="https://agentmods.dev/badge/skills/maludb-ed/htmx-php-builder/php-session-auth.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 56 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,923 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00056 $0.01923
Opus 5.5 $0.00022 $0.00769
Sonnet 5.5 $0.00011 $0.00385
Haiku 4.5 $0.00006 $0.00192

Measured 1mo ago against content hash f73cb1579da8, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

php-session-auth scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

$u = $stmt->fetch(PDO::FETCH_ASSOC);
skills/php-session-auth/SKILL.md · 135 lines

How it starts

The opening of the file, as written. The whole thing — 135 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Vanilla PHP Session Auth + CSRF

Overview

Building session auth in vanilla PHP is mostly solved by password_hash, hash_equals, and session_regenerate_id — agents apply those reliably. The failures are judgment calls this skill exists to fix: missing brute-force protection, un-normalized emails, CSRF guards that only cover POST, and "hardening" that is actually an anti-pattern.

Core principle: the cryptography is the easy part. The security comes from the policy around it — rate limits, normalization, what you choose not to do.

When to Use

  • Implementing login / registration / logout in PHP without a framework
  • Adding CSRF protection to state-changing forms
  • Reviewing hand-rolled PHP auth for security gaps

When NOT to use: Laravel/Symfony (their auth + CSRF are built in — use those, don't hand-roll).

Non-Negotiables (checklist)

Requirement Rule
Password storage password_hash($pw, PASSWORD_DEFAULT) + password_verify. Re-hash on login via password_needs_rehash.
Password length Min 12 chars; max 72 bytes (bcrypt silently truncates past 72).
Email Normalize: strtolower(trim($email)) before BOTH insert and lookup. Enforce a UNIQUE index and catch SQLSTATE 23000.
Session login session_regenerate_id(true) on every privilege change (login, logout, role change).
CSRF token Per-session, bin2hex(random_bytes(32)), compared with hash_equals. Rotate on login.
CSRF guard Validate on every unsafe method (POST, PUT, PATCH, DELETE) — not POST alone.
Brute force Rate-limit + lock login attempts per account AND per IP. Non-optional.
Enumeration Generic errors on login AND register; equalize timing with a precomputed dummy hash.
Cookies HttpOnly, Secure (in prod), SameSite=Lax.
Headers On auth pages: Cache-Control: no-store, X-Frame-Options: DENY, Referrer-Policy: same-origin.

Correct Patterns

Session bootstrap (before session_start()):

session_set_cookie_params([
    'lifetime' => 0, 'path' => '/', 'secure' => $isHttps,
    'httponly' => true, 'samesite' => 'Lax',
]);
ini_set('session.use_strict_mode', '1');   // reject attacker-supplied SIDs
ini_set('session.use_only_cookies', '1');
session_name('SID');
session_start();

Read the full file on GitHub · 135 lines

Files

What ships with it

2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 1mo ago First seen · 135 lines · 56 tokens per session scan A f73cb1579da8

Subscribe to this mod's changes

php-session-auth is a skill published in the GitHub repository maludb-ed/htmx-php-builder (9 stars, last pushed 14d ago), licensed MIT. It adds 56 tokens to every session and 1,923 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories