security security_error ai_generated true

SQL injection vulnerability detected in raw query

ID: security/sql-injection-orm-raw

Also available as: JSON · Markdown
92%Fix Rate
90%Confidence
3Evidence
2023-01-01First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
any active

Root Cause

Raw SQL queries with string interpolation are vulnerable to SQL injection.

generic

Workarounds

  1. 95% success Use parameterized queries / prepared statements
    cursor.execute("SELECT * FROM t WHERE id = %s", (user_id,))
  2. 90% success Use ORM query builders instead of raw SQL
    Model.objects.filter(id=user_id) or db.query(Model).filter_by(id=user_id)

Dead Ends

Common approaches that don't work:

  1. Escape user input manually with string replacement 85% fail

    Manual escaping is error-prone and misses edge cases.

  2. Validate input is alphanumeric only 70% fail

    Overly restrictive and still misses injection vectors in numeric fields.