Security Anti-Patterns Guard for Java
Overview
Code generation guard that prevents security vulnerabilities while writing Java web application code. Covers OWASP Top 10 Web (2025), OWASP API Security Top 10 (2023), with CWE references throughout.
Stack: Java 11/17/21, Spring Boot, Spring Security, Jakarta EE, Hibernate, JPA
Java Version Focus:
- Java 17 (primary target - ~35% usage)
- Java 11 (secondary - ~33% usage)
- Java 21 (latest LTS - growing adoption)
When to Activate
Activate when generating code that:
- Handles user input (forms, API requests, file uploads)
- Queries databases (JDBC, JPA, Hibernate)
- Performs authentication or authorization
- Manages sessions or JWT tokens
- Processes files or paths
- Serializes/deserializes data (ObjectInputStream, XML, JSON)
- Uses cryptographic operations
- Executes system commands or processes
- Configures Spring Security or Jakarta EE security
Critical Rules (Top 10)
- NEVER concatenate strings into SQL queries - use
PreparedStatement or JPA named parameters
- NEVER use
ObjectInputStream.readObject() on untrusted data - use JSON with validation
- NEVER use
Runtime.exec() with user input - use ProcessBuilder with argument list
- NEVER use
java.util.Random for security - use SecureRandom
- NEVER use MD5/SHA1 for passwords - use BCrypt or Argon2
- NEVER hardcode secrets - use environment variables or secret managers
- NEVER disable CSRF without understanding the risk - keep enabled for browser clients
- NEVER trust user-supplied file paths - normalize and validate with
Path.resolve() + startsWith()
- ALWAYS verify resource ownership (BOLA) - check
userId before returning data
- ALWAYS validate input at API boundaries - use Bean Validation annotations
Module Index
| Module |
Focus |
Key Vulnerabilities |
| references/injection.md |
SQL, Command, LDAP, XPath, JPQL |
CWE-89, CWE-78, CWE-90, CWE-643 |
| references/deserialization.md |
ObjectInputStream, XXE, JSON/YAML |
CWE-502, CWE-611 |
| references/xss-output.md |
XSS, template escaping, JSP/Thymeleaf |
CWE-79 |
| references/auth-access.md |
BOLA, BFLA, sessions, JWT |
CWE-862, CWE-863, CWE-287 |
| references/crypto-secrets.md |
Secrets, hashing, encryption |
CWE-798, CWE-327, CWE-916 |
| references/input-validation.md |
Bean Validation, forms, uploads |
CWE-20, CWE-434, CWE-915 |
| references/file-operations.md |
Path traversal, temp files, NIO |
CWE-22, CWE-377 |
| references/spring-security.md |
CSRF, CORS, method security, actuators |
Spring-specific |
| references/jakarta-ee.md |
Servlet security, EJB, JAX-RS |
Jakarta EE-specific |
| references/dependencies.md |
Maven/Gradle audit, supply chain |
CWE-1104, CWE-1357 |
| references/java-runtime.md |
Reflection, ReDoS, ScriptEngine |
CWE-94, CWE-1333 |
Quick Decision Tree
User input involved?
├─ Database query → See references/injection.md (use PreparedStatement/JPA named params)
├─ File path → See references/file-operations.md (use Path.resolve() + startsWith check)
├─ Command execution → See references/injection.md (ProcessBuilder with list args)
├─ Deserialization → See references/deserialization.md (NEVER ObjectInputStream on untrusted)
├─ Template rendering → See references/xss-output.md (use th:text not th:utext)
└─ API endpoint → See references/auth-access.md + references/input-validation.md
Storing/generating secrets?
├─ API keys → See references/crypto-secrets.md (env vars or Vault)
├─ Passwords → See references/crypto-secrets.md (BCrypt/Argon2)
└─ Tokens → See references/crypto-secrets.md (SecureRandom)
Framework-specific?
├─ Spring Boot → See references/spring-security.md
├─ Jakarta EE → See references/jakarta-ee.md
└─ Core Java → See references/java-runtime.md
How to Use This Skill
- During code generation: Reference relevant module for specific vulnerability patterns
- Code review: Check generated code against patterns in each module
- When uncertain: Default to the more secure option; add explicit comments explaining security decisions
Sources
1---2name: security-antipatterns-java3description: Use when generating Java code for web applications, APIs, or enterprise systems - prevents OWASP Top 10 vulnerabilities in Spring Boot, Jakarta EE, and core Java4---56# Security Anti-Patterns Guard for Java78## Overview910Code generation guard that prevents security vulnerabilities while writing Java web application code. Covers OWASP Top 10 Web (2025), OWASP API Security Top 10 (2023), with CWE references throughout.1112**Stack:** Java 11/17/21, Spring Boot, Spring Security, Jakarta EE, Hibernate, JPA1314**Java Version Focus:**15- Java 17 (primary target - ~35% usage)16- Java 11 (secondary - ~33% usage)17- Java 21 (latest LTS - growing adoption)1819## When to Activate2021Activate when generating code that:22- Handles user input (forms, API requests, file uploads)23- Queries databases (JDBC, JPA, Hibernate)24- Performs authentication or authorization25- Manages sessions or JWT tokens26- Processes files or paths27- Serializes/deserializes data (ObjectInputStream, XML, JSON)28- Uses cryptographic operations29- Executes system commands or processes30- Configures Spring Security or Jakarta EE security3132## Critical Rules (Top 10)33341. **NEVER** concatenate strings into SQL queries - use `PreparedStatement` or JPA named parameters352. **NEVER** use `ObjectInputStream.readObject()` on untrusted data - use JSON with validation363. **NEVER** use `Runtime.exec()` with user input - use `ProcessBuilder` with argument list374. **NEVER** use `java.util.Random` for security - use `SecureRandom`385. **NEVER** use MD5/SHA1 for passwords - use BCrypt or Argon2396. **NEVER** hardcode secrets - use environment variables or secret managers407. **NEVER** disable CSRF without understanding the risk - keep enabled for browser clients418. **NEVER** trust user-supplied file paths - normalize and validate with `Path.resolve()` + `startsWith()`429. **ALWAYS** verify resource ownership (BOLA) - check `userId` before returning data4310. **ALWAYS** validate input at API boundaries - use Bean Validation annotations4445## Module Index4647| Module | Focus | Key Vulnerabilities |48|--------|-------|---------------------|49| [references/injection.md](references/injection.md) | SQL, Command, LDAP, XPath, JPQL | CWE-89, CWE-78, CWE-90, CWE-643 |50| [references/deserialization.md](references/deserialization.md) | ObjectInputStream, XXE, JSON/YAML | CWE-502, CWE-611 |51| [references/xss-output.md](references/xss-output.md) | XSS, template escaping, JSP/Thymeleaf | CWE-79 |52| [references/auth-access.md](references/auth-access.md) | BOLA, BFLA, sessions, JWT | CWE-862, CWE-863, CWE-287 |53| [references/crypto-secrets.md](references/crypto-secrets.md) | Secrets, hashing, encryption | CWE-798, CWE-327, CWE-916 |54| [references/input-validation.md](references/input-validation.md) | Bean Validation, forms, uploads | CWE-20, CWE-434, CWE-915 |55| [references/file-operations.md](references/file-operations.md) | Path traversal, temp files, NIO | CWE-22, CWE-377 |56| [references/spring-security.md](references/spring-security.md) | CSRF, CORS, method security, actuators | Spring-specific |57| [references/jakarta-ee.md](references/jakarta-ee.md) | Servlet security, EJB, JAX-RS | Jakarta EE-specific |58| [references/dependencies.md](references/dependencies.md) | Maven/Gradle audit, supply chain | CWE-1104, CWE-1357 |59| [references/java-runtime.md](references/java-runtime.md) | Reflection, ReDoS, ScriptEngine | CWE-94, CWE-1333 |6061## Quick Decision Tree6263```64User input involved?65├─ Database query → See references/injection.md (use PreparedStatement/JPA named params)66├─ File path → See references/file-operations.md (use Path.resolve() + startsWith check)67├─ Command execution → See references/injection.md (ProcessBuilder with list args)68├─ Deserialization → See references/deserialization.md (NEVER ObjectInputStream on untrusted)69├─ Template rendering → See references/xss-output.md (use th:text not th:utext)70└─ API endpoint → See references/auth-access.md + references/input-validation.md7172Storing/generating secrets?73├─ API keys → See references/crypto-secrets.md (env vars or Vault)74├─ Passwords → See references/crypto-secrets.md (BCrypt/Argon2)75└─ Tokens → See references/crypto-secrets.md (SecureRandom)7677Framework-specific?78├─ Spring Boot → See references/spring-security.md79├─ Jakarta EE → See references/jakarta-ee.md80└─ Core Java → See references/java-runtime.md81```8283## How to Use This Skill84851. **During code generation:** Reference relevant module for specific vulnerability patterns862. **Code review:** Check generated code against patterns in each module873. **When uncertain:** Default to the more secure option; add explicit comments explaining security decisions8889## Sources9091- [OWASP Java Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Java_Security_Cheat_Sheet.html)92- [OWASP Top 10:2025](https://owasp.org/Top10/2025/)93- [OWASP Deserialization Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html)94- [Spring Security Reference](https://docs.spring.io/spring-security/reference/)95- [SEI CERT Oracle Coding Standard for Java](https://wiki.sei.cmu.edu/confluence/display/java/)96- [Baeldung Security Guides](https://www.baeldung.com/security-spring)