Fix SQL Injection (Legacy & Modern) in TurboGears
SQL Injection in TurboGears typically occurs when developers bypass the SQLAlchemy ORM to run raw SQL using string interpolation. Whether handling legacy SQLObject/SQLAlchemy 1.x or modern SQLAlchemy 2.0 sessions, the fix is universal: stop concatenating user input and start using bound parameters or the ORM's abstraction layer.
The Vulnerable Pattern
from tg import request from myapp.model import DBSessionVULNERABLE: Direct string formatting into raw SQL via DBSession.execute
This allows an attacker to break out of the query using: ’ OR ‘1’=‘1
username = request.params.get(‘user’) query = “SELECT * FROM users WHERE username = ‘%s’” % username result = DBSession.execute(query)
The Secure Implementation
The vulnerability stems from treating untrusted user input as executable SQL code. In the vulnerable snippet, Python's string formatting (%) replaces the placeholder before the database sees the query. In the secure snippets, we leverage SQLAlchemy's underlying DB-API implementation. The ORM (Option 1) abstracts the query building entirely, ensuring input is treated as a literal. The parameterized raw SQL (Option 2) sends the query template and the data separately to the database engine, making it mathematically impossible for the input to alter the query logic.
from tg import request from myapp.model import DBSession, User from sqlalchemy import textSECURE OPTION 1: Modern ORM (Preferred)
The ORM automatically handles parameterization
username = request.params.get(‘user’) user = DBSession.query(User).filter(User.username == username).first()
SECURE OPTION 2: Parameterized Raw SQL
Use sqlalchemy.text() with a dictionary for bound parameters
query = text(“SELECT * FROM users WHERE username = :u”) result = DBSession.execute(query, {‘u’: username})
Your TurboGears API
might be exposed to SQL Injection (Legacy & Modern)
74% of TurboGears apps fail this check. Hackers use automated scanners to find this specific flaw. Check your codebase before they do.
Free Tier • No Credit Card • Instant Report
Verified by Ghost Labs Security Team
This content is continuously validated by our automated security engine and reviewed by our research team. Ghost Labs analyzes over 500+ vulnerability patterns across 40+ frameworks to provide up-to-date remediation strategies.