Skillshub php-security
PHP security standards for database access, password handling, and input validation. Use when securing PHP apps against SQL injection, XSS, or weak password storage. (triggers: **/*.php, pdo, password_hash, htmlentities, filter_var)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/php-security" ~/.claude/skills/comeonoliver-skillshub-php-security && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/php-security/SKILL.mdsource content
PHP Security
Priority: P0 (CRITICAL)
Structure
src/ └── Security/ ├── Validators/ └── Auth/
Implementation Guidelines
- Prepared Statements: Use PDO with Parameterized Queries:
. NEVER concatenate user input into SQL strings.$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id'); $stmt->execute([':id' => $id]); - Password Hashing: ALWAYS use
withpassword_hash()
(PHP 7.4+) orPASSWORD_ARGON2ID
.PASSWORD_BCRYPT - Auth Verification: Use
. Usepassword_verify()
to upgrade legacy hashes. Implement Rate Limiting and MFA where appropriate.password_needs_rehash() - XSS Escaping: Use
orhtmlentities($userInput, ENT_QUOTES | ENT_HTML5, 'UTF-8')
on all user output. Prefer Twig or Blade for auto-escaping.htmlspecialchars() - CSRF Protection: Mandate
for all state-changing requests (CSRF tokens
,POST
,PUT
,PATCH
).DELETE - Input Validation: Use
orfilter_var($email, FILTER_VALIDATE_EMAIL)
. Always Whitelist allowed values.filter_var($url, FILTER_VALIDATE_URL) - File Security: RESTRICT file uploads by MIME type and extension. Store uploads outside the public root.
- Session Safety: Configure
,session.cookie_httponly = 1
, andsession.cookie_secure = 1
.session.samesite = "Lax" - Header Security: Enforce
,Content-Security-Policy (CSP)
, andX-Frame-Options: DENY
.X-Content-Type-Options: nosniff
Anti-Patterns
- No SQL string concatenation: Use PDO prepared statements only.
- No MD5/SHA1 for passwords: Use
.password_hash($password, PASSWORD_ARGON2ID) - No raw
/$_GET
: Validate all input with$_POST
first.filter_var() - No production error display: Log to file; never show to users.