> golang-security
Security standards for Go backend services. Use when implementing input validation, crypto, or SQL injection prevention in Go. (triggers: **/*.go, crypto/rand, sql, sanitize, jwt, bcrypt, validation)
curl "https://skillshub.wtf/HoangNguyen0403/agent-skills-standard/golang-security?format=md"Golang Security Standards
Priority: P0 (CRITICAL)
Implementation Guidelines
Input Validation
- Validation: Use
go-playground/validatororgoogle/go-cmpfor struct validation. - Sanitization: Sanitize user input before processing. Use
bluemondayfor HTML sanitization.
Cryptography
- Random: ALWAYS use
crypto/rand, NEVERmath/randfor security-sensitive operations (tokens, keys, IVs). - Hashing: Use Argon2id for password hashing (
golang.org/x/crypto/argon2). Do NOT use bcrypt (weaker) or MD5/SHA1 (insecure). Recommended params:time=1, memory=64MB, threads=4. - Encryption: Use
crypto/aeswith GCM mode for authenticated encryption.
SQL Injection Prevention
- Parameterized Queries: ALWAYS use
$1, $2placeholders withdatabase/sqlor ORM (GORM, sqlx). - No String Concatenation: Never build queries with
fmt.Sprintf().
Authentication
- JWT: Use
golang-jwt/jwtv5+. EnforceRS256(preferred) orHS256. Rejectnoneand symmetric algorithms for multi-service auth. Validatealg,iss,aud,expclaims. - Sessions: Use secure, httpOnly cookies with
gorilla/sessions.
Secret Management
- Environment Variables: Load secrets via
godotenvor Kubernetes secrets. - No Hardcoding: Never commit API keys, passwords, or tokens to Git.
Anti-Patterns
- No
math/randfor Security: RNG is predictable. Usecrypto/rand. - No
fmt.Sprintf()for SQL: Causes SQL injection. Use placeholders. - No bcrypt or MD5 for Passwords: Use
argon2idexclusively. - No Exposed Error Details: Don't leak stack traces to clients in production.
References
> related_skills --same-repo
> typescript-tooling
Development tools, linting, and build config for TypeScript. Use when configuring ESLint, Prettier, Jest, Vitest, tsconfig, or any TS build tooling. (triggers: tsconfig.json, .eslintrc.*, jest.config.*, package.json, eslint, prettier, jest, vitest, build, compile, lint)
> typescript-security
Secure coding practices for TypeScript. Use when validating input, handling auth tokens, sanitizing data, or managing secrets and sensitive configuration. (triggers: **/*.ts, **/*.tsx, validate, sanitize, xss, injection, auth, password, secret, token)
> typescript-language
Modern TypeScript standards for type safety and maintainability. Use when working with types, interfaces, generics, enums, unions, or tsconfig settings. (triggers: **/*.ts, **/*.tsx, tsconfig.json, type, interface, generic, enum, union, intersection, readonly, const, namespace)
> typescript-best-practices
Idiomatic TypeScript patterns for clean, maintainable code. Use when writing or refactoring TypeScript classes, functions, modules, or async logic. (triggers: **/*.ts, **/*.tsx, class, function, module, import, export, async, promise)