Django poskytuje silnou vestavěnou ochranu proti běžným webovým zranitelnostem (OWASP Top 10) — bezpečnost je prioritou návrhu a mnoho ochran je ve výchozím nastavení povoleno. Jejich pochopení je nezbytné pro vytváření bezpečných aplikací a pro předcházení náhodnému zeslabování těchto bezpečnostních opatření.
# ✅ the ORM uses PARAMETERIZED queries automatically — safe by default
filter
# input is never executable SQL
# ⚠️ raw SQL CAN be vulnerable — always parameterize:
"SELECT * FROM users WHERE name = %s"
# ✅ parameterized
# NEVER: f"SELECT ... WHERE name = '{user_input}'" ❌ injectable
ORM parametrizuje všechny dotazy, čímž ve výchozím nastavení brání SQL injection — hlavní třídě zranitelností eliminované, pokud nepíšete nebezpečný raw SQL.
2. XSS (Cross-Site Scripting) — auto-escaping v šablonách
html
{{ user_input }} <!-- AUTO-ESCAPED: <script> → <script> → safe -->
{{ trusted|safe }} <!-- opt out ONLY for content you fully trust -->
Django šablony automaticky escapují výstup proměnných ve výchozím nastavení, čímž neutralizují vložený HTML/skripty — vestavěná ochrana proti XSS.
# settings.py — enable these in production
SECURE_SSL_REDIRECT = True# force HTTPS
SESSION_COOKIE_SECURE = True# cookies only over HTTPS
CSRF_COOKIE_SECURE = True
SECURE_HSTS_SECONDS = 31536000# HSTS — enforce HTTPS
SECURE_CONTENT_TYPE_NOSNIFF = True
⚠️ DEBUG = False in production — DEBUG=True leaks tracebacks, settings, source paths
⚠️ Keep SECRET_KEY secret (env vars, not code) — it signs sessions/tokens
⚠️ Set ALLOWED_HOSTS to prevent Host-header attacks
⚠️ Don't use |safe or mark_safe on untrusted input (reopens XSS)
⚠️ Always validate/sanitize input; use Django forms/serializers
⚠️ Run `python manage.py check --deploy` to audit production security settings
Proč je to důležité
Bezpečnost je kritická pro jakoukoli webovou aplikaci a pochopení vestavěných ochran Django je nezbytné jak pro jejich využívání, tak pro zabránění jejich náhodnému oslabení — silné bezpečnostní výchozí hodnoty Django jsou hlavním důvodem, proč je trusted pro závažné aplikace, ale chrání vás pouze pokud jim rozumíte a je respektujete.
Django řeší nejběžnější a nejnebezpečnější webové zranitelnosti ve výchozím nastavení: ORM brání SQL injection prostřednictvím parametrizovaných dotazů, auto-escaping šablony brání XSS, middleware CSRF brání cross-site request forgery, ochrana před clickjackingem je vestavěna a hesla jsou bezpečně hashovány — eliminując celé kategorie zranitelností, které musí vývojáři zpracovávat ručně (a často se zmýlí) v méně bezpečnostně zaměřených frameworcích.
Pochopení těchto ochran je důležité, abyste věděli, že existují, abyste je správně nakonfigurovali (zejména produkční bezpečnostní nastavení pro HTTPS, bezpečné cookies a HSTS) a — kriticky — nechtěně je nezeslabili: nejčastější chyby Django bezpečnosti pocházejí z oslabení výchozích hodnot, jako je ponechání DEBUG=True v produkci (úniku citlivých traceback a nastavení útočníkům), commitování SECRET_KEY, používání |safe/mark_safe na nedůvěryhodný vstup (znovuotevření XSS), psaní neparametrizovaného raw SQL (znovuotevření injection) nebo nesprávné konfigurace ALLOWED_HOSTS.
Znalost ochran, které Django poskytuje, jak nakonfigurovat bezpečná produkční nastavení a odpovědnost neoslabovat výchozí nastavení (plus používání check --deploy pro audit) je fundamentální pro vytváření bezpečných aplikací.
Protože webové aplikace jsou neustálými cíli útoků a bezpečnostní selhání mohou být katastrofální (porušení dat, kompromitace účtů), pochopení bezpečnostního modelu Django — jak toho, co chrání automaticky, tak vaší odpovědnosti udržovat tyto ochrany — je nezbytné, vysokoriziková znalost, která odráží profesionální, bezpečnostně vědomý vývoj a je časté, důležité téma pro jakoukoli produkční aplikaci.