Vulnerabilities

What is SQL Injection?

SQL injection is an attack where malicious SQL code is inserted into a query through unvalidated user input, allowing attackers to read, modify, or delete database data.

By the Hyrax team·5 min read·May 1, 2026
TL;DR
  1. 1.Definition
  2. 2.How SQL Injection Works
  3. 3.Types of SQL Injection
  4. 4.Impact
  5. 5.Prevention

Definition

SQL injection (SQLi) is a code injection attack in which an attacker inserts malicious SQL statements into an input field that is concatenated into a database query. When the application executes the modified query, the injected SQL runs with the privileges of the database user — enabling attackers to read sensitive data, modify records, delete tables, or in some configurations execute operating system commands.

SQL injection has consistently appeared in the OWASP Top 10 for over two decades. It remains one of the most exploited web application vulnerabilities because the root cause — concatenating untrusted input into a query string — is a pattern that appears naturally when developers build data-driven applications without security training.

How SQL Injection Works

Consider a login form that checks credentials with this query:

SELECT * FROM users WHERE username = 'input_username' AND password = 'input_password'

An attacker enters the username: admin'-- and any password. The resulting query becomes:

SELECT * FROM users WHERE username = 'admin'--' AND password = 'anything'

The -- comment sequence causes the database to ignore the password check entirely. The attacker is authenticated as admin without knowing the password.

Types of SQL Injection

In-band SQLi

The attacker receives results directly in the application response. Classic and error-based SQLi fall into this category. It is the most common and easiest to exploit.

Blind SQLi

The application does not return query results in its response, but the attacker can infer data by asking true/false questions (Boolean-based) or causing deliberate delays (time-based). Slower to exploit but equally dangerous.

Out-of-band SQLi

The attacker receives data through a separate channel — DNS lookups, HTTP requests to an external server. Requires specific database server capabilities but can bypass many security controls.

Impact

A successful SQL injection attack can result in:

  • Complete extraction of the database including user credentials, PII, and financial data
  • Authentication bypass without knowing any password
  • Data modification or deletion
  • Database administrator privilege escalation
  • In some configurations: operating system command execution via xp_cmdshell or INTO OUTFILE

Prevention

SQL injection is well-understood and fully preventable:

Parameterized queries / prepared statements

The single most effective defense. Instead of concatenating user input into the query string, the query structure is defined first and values are passed separately. The database driver handles escaping — the input can never alter query structure.

Stored procedures

Pre-compiled SQL routines that separate logic from data. Effective when implemented correctly, but stored procedures can themselves be vulnerable if they use dynamic SQL internally.

Input validation and allowlisting

Reject input that does not match an expected format. For numeric IDs, reject anything that is not a number. For usernames, reject characters that have no business being in a username. This is defense in depth, not a primary control.

Principle of least privilege

The database user the application connects as should have only the permissions it needs. A read-only API should connect with a read-only database user. This limits the blast radius of a successful injection.

DefenseEffectivenessImplementation EffortNotes
Parameterized queriesVery high — eliminates the attackLow — API-level changePrimary control; use everywhere
ORMs (parameterized by default)High — when used correctlyLow — use ORM as designedWatch for raw query escape hatches
Stored proceduresHigh — when no dynamic SQLMediumDynamic SQL inside SP negates benefit
Input validationModerate — defense in depthMediumNever rely on this alone
WAFLow to moderateLow to mediumBypassable; supplements, does not replace code-level fixes

SQL Injection and Autonomous Code Governance

SQL injection is one of the highest-priority targets for autonomous code governance because the fix pattern is well-defined: replace string concatenation with parameterized queries. Hydra detects SQL injection patterns through taint analysis — tracing data flow from user-controlled sources (request parameters, headers, cookies) to query construction — and generates parameterized query replacements that match the codebase's existing database access patterns. The fix is verified with tests before delivery.

Frequently Asked Questions

Does using an ORM prevent SQL injection?

ORMs use parameterized queries by default, which prevents injection when you use the ORM as intended. However, most ORMs include escape hatches for raw SQL — query builders, raw() methods, execute() with string templates. These raw interfaces are still vulnerable. SQL injection in ORM-heavy codebases almost always comes from these escape hatches.

Is SQL injection still relevant with modern frameworks?

Yes. SQL injection remains in the OWASP Top 10 and is actively exploited. Modern frameworks reduce the surface area by using parameterized queries by default, but every framework has patterns that reintroduce the vulnerability. Legacy codebases, reporting queries, search functionality, and admin panels are common sources.

Can a WAF stop SQL injection?

WAFs can block known SQL injection signatures but are bypassable through encoding, fragmentation, and novel attack patterns. They provide defense-in-depth but should never be the primary control. The correct fix is parameterized queries in the application code.

Stop flagging. Start fixing.

Hyrax reviews your pull requests, remediates issues autonomously, and closes the ticket.

Join the waitlist