6.0 KiB
6.0 KiB
description, languages, alwaysApply
| description | languages | alwaysApply | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Framework & language security guides (Django/DRF, Laravel/Symfony/Rails, .NET, Java/JAAS, Node.js, PHP config) |
|
false |
rule_id: codeguard-0-framework-and-languages
Framework & Language Guides
Apply secure‑by‑default patterns per platform. Harden configurations, use built‑in protections, and avoid common pitfalls.
Django
- Disable DEBUG in production; keep Django and deps updated.
- Enable
SecurityMiddleware, clickjacking middleware, MIME sniffing protection. - Force HTTPS (
SECURE_SSL_REDIRECT); configure HSTS; set secure cookie flags (SESSION_COOKIE_SECURE,CSRF_COOKIE_SECURE). - CSRF: ensure
CsrfViewMiddlewareand{% csrf_token %}in forms; proper AJAX token handling. - XSS: rely on template auto‑escaping; avoid
mark_safeunless trusted; usejson_scriptfor JS. - Auth: use
django.contrib.auth; validators inAUTH_PASSWORD_VALIDATORS. - Secrets: generate via
get_random_secret_key; store in env/secrets manager.
Django REST Framework (DRF)
- Set
DEFAULT_AUTHENTICATION_CLASSESand restrictiveDEFAULT_PERMISSION_CLASSES; never leaveAllowAnyfor protected endpoints. - Always call
self.check_object_permissions(request, obj)for object‑level authz. - Serializers: explicit
fields=[...]; avoidexcludeand"__all__". - Throttling: enable rate limits (and/or at gateway/WAF).
- Disable unsafe HTTP methods where not needed. Avoid raw SQL; use ORM/parameters.
Laravel
- Production:
APP_DEBUG=false; generate app key; secure file perms. - Cookies/sessions: enable encryption middleware; set
http_only,same_site,secure, short lifetimes. - Mass assignment: use
$request->only()/$request->validated(); avoid$request->all(). - SQLi: use Eloquent parameterization; validate dynamic identifiers.
- XSS: rely on Blade escaping; avoid
{!! ... !!}for untrusted data. - File uploads: validate
file, size, andmimes; sanitize filenames withbasename. - CSRF: ensure middleware and form tokens enabled.
Symfony
- XSS: Twig auto‑escaping; avoid
|rawunless trusted. - CSRF: use
csrf_token()andisCsrfTokenValid()for manual flows; Forms include tokens by default. - SQLi: Doctrine parameterized queries; never concatenate inputs.
- Command execution: avoid
exec/shell_exec; use Filesystem component. - Uploads: validate with
#[File(...)]; store outside public; unique names. - Directory traversal: validate
realpath/basenameand enforce allowed roots. - Sessions/security: configure secure cookies and authentication providers/firewalls.
Ruby on Rails
- Avoid dangerous functions:
eval("ruby code here")
system("os command here")
`ls -al /` # (backticks contain os command)
exec("os command here")
spawn("os command here")
open("| os command here")
Process.exec("os command here")
Process.spawn("os command here")
IO.binread("| os command here")
IO.binwrite("| os command here", "foo")
IO.foreach("| os command here") {}
IO.popen("os command here")
IO.read("| os command here")
IO.readlines("| os command here")
IO.write("| os command here", "foo")
- SQLi: always parameterize; use
sanitize_sql_likefor LIKE patterns. - XSS: default auto‑escape; avoid
raw,html_safeon untrusted data; usesanitizeallow‑lists. - Sessions: database‑backed store for sensitive apps; force HTTPS (
config.force_ssl = true). - Auth: use Devise or proven libraries; configure routes and protected areas.
- CSRF:
protect_from_forgeryfor state‑changing actions. - Secure redirects: validate/allow‑list targets.
- Headers/CORS: set secure defaults; configure
rack-corscarefully.
.NET (ASP.NET Core)
- Keep runtime and NuGet packages updated; enable SCA in CI.
- Authz: use
[Authorize]attributes; perform server‑side checks; prevent IDOR. - Authn/sessions: ASP.NET Identity; lockouts; cookies
HttpOnly/Secure; short timeouts. - Crypto: use PBKDF2 for passwords, AES‑GCM for encryption; DPAPI for local secrets; TLS 1.2+.
- Injection: parameterize SQL/LDAP; validate with allow‑lists.
- Config: enforce HTTPS redirects; remove version headers; set CSP/HSTS/X‑Content‑Type‑Options.
- CSRF: anti‑forgery tokens on state‑changing actions; validate on server.
Java and JAAS
- SQL/JPA: use
PreparedStatement/named parameters; never concatenate input. - XSS: allow‑list validation; sanitize output with reputable libs; encode for context.
- Logging: parameterized logging to prevent log injection.
- Crypto: AES‑GCM; secure random nonces; never hardcode keys; use KMS/HSM.
- JAAS: configure
LoginModulestanzas; implementinitialize/login/commit/abort/logout; avoid exposing credentials; segregate public/private credentials; manage subject principals properly.
Node.js
- Limit request sizes; validate and sanitize input; escape output.
- Avoid
eval,child_process.execwith user input; usehelmetfor headers;hppfor parameter pollution. - Rate limit auth endpoints; monitor event loop health; handle uncaught exceptions cleanly.
- Cookies: set
secure,httpOnly,sameSite; setNODE_ENV=production. - Keep packages updated; run
npm audit; use security linters and ReDoS testing.
PHP Configuration
- Production php.ini:
expose_php=Off, log errors not display; restrictallow_url_fopen/include; setopen_basedir. - Disable dangerous functions; set session cookie flags (
Secure,HttpOnly,SameSite=Strict); enable strict session mode. - Constrain upload size/number; set resource limits (memory, post size, execution time).
- Use Snuffleupagus or similar for additional hardening.
Implementation Checklist
- Use each framework’s built‑in CSRF/XSS/session protections and secure cookie flags.
- Parameterize all data access; avoid dangerous OS/exec functions with untrusted input.
- Enforce HTTPS/HSTS; set secure headers.
- Centralize secret management; never hardcode secrets; lock down debug in production.
- Validate/allow‑list redirects and dynamic identifiers.
- Keep dependencies and frameworks updated; run SCA and static analysis regularly.