Cross-site scripting (XSS) via direct Jinja2 template rendering in Flask

High Risk cross-site-scripting
pythonflaskjinja2templatexssweb

What it is

XSS vulnerability in Flask applications where templates are rendered directly with raw Jinja2 without Flask's autoescaping or safe context handling, allowing malicious scripts to execute when untrusted data is rendered in user browsers.

â„šī¸ Configuration Fix

Configuration changes required - see explanation below.

💡 Explanation

â„šī¸ Configuration Fix

Configuration changes required - see explanation below.

💡 Explanation

Why it happens

Using Jinja2.Template directly instead of Flask's render_template bypasses Flask's security features.

Root causes

Direct Jinja2 Template Rendering

Using Jinja2.Template directly instead of Flask's render_template bypasses Flask's security features.

Missing Auto-Escaping Configuration

Jinja2 templates rendered without proper auto-escaping configuration enabled.

Fixes

1

Use Flask's render_template with Auto-Escaping

Always use Flask's render_template() function which automatically enables HTML escaping for .html templates.

2

Configure Jinja2 Environment with Auto-Escaping

If using Jinja2 directly, configure Environment with proper auto-escaping for HTML contexts.

3

Mark Only Trusted Content as Safe

Only mark content as safe after proper sanitization, never trust user input directly.

Detect This Vulnerability in Your Code

Sourcery automatically identifies cross-site scripting (xss) via direct jinja2 template rendering in flask and many other security issues in your codebase.