How to Protect Your Apps Against SQL Injection

SQL Injection (SQLi) is a prevalent cyber-attack technique that has been a significant concern for over two decades. Attackers use this method to insert malicious SQL code via user inputs, granting them unauthorized database access. The consequences can range from unauthorized data viewing to data modification or even deletion, emphasizing its importance in the digital age.

Essentially, your most important asset – DATA is at stake.

Read on to find out more.

Simple SQL Injection Examples

SQL Injection Via A Login Form

Suppose you have a simple login form where users provide their username and password. The backend code might look like this:

query = "SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'";

An attacker can exploit this by entering the following in the username field:

admin' OR '1' = '1' --

And any random text in the password field. The SQL query becomes:

query = "SELECT * FROM users WHERE username='admin' OR '1' = '1' -- ' AND password='randomText'";

The — is an SQL comment, so everything after it is ignored.

This modified query will always return true, allowing the attacker to bypass the login form without knowing the actual password.

SQL Injection Via APIs

APIs, especially those that interact with databases, are also susceptible to SQL Injection attacks. Consider an API endpoint GET /api/users?id=<user_id> that fetches user details based on a provided user ID.

The backend code might look like this:

query = "SELECT * FROM users WHERE id=" + user_id;

An attacker can exploit this API by sending a crafted request:

GET /api/users?id=1 OR 1=1

This would modify the SQL query to:

query = "SELECT * FROM users WHERE id=1 OR 1=1";

The condition 1=1 is always true, so this query would return details of all users in the database, leading to a potential data breach.

And, if the API responds with detailed error messages, attackers can use these messages to gather information about the database structure and refine their attacks.

SQL Injection – Potential Causes

Lack of Input Validation

Blindly trusting user inputs, be it from a web form or an API payload.

Direct SQL Query Execution

Crafting SQL queries by string concatenation with user inputs is like tightrope walking without a safety harness.

Spotting SQL Injection

Manual Testing

Experiment with input fields and API endpoints. Tools like Postman or Swagger can help test APIs. Using SQL special characters can reveal vulnerabilities.

Automated Tools

SQLMap, Burp Suite, OWASP ZAP, and SAST tools can identify potential weak points in web apps and API endpoints.

Code Review

Examine your code to identify areas where raw user input interacts directly with SQL queries.

Error Messages

Exposing database errors can be a red flag. Handle them discreetly and log details server-side.

Protecting Against SQL Injection

Use Prepared Statements

These provide a robust type-checking mechanism. Libraries like PDO (PHP) or PreparedStatement (Java) can help.

$stmt = $pdo->prepare("SELECT * FROM users WHERE username= :username AND password= :password");
$stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password);
$stmt->execute();

Input Validation

Ensure comprehensive validation for both web forms and API payloads. Libraries like express-validator for Node.js are useful.

Least Privilege Principle

Limit database user rights and only grant necessary operation permissions.

Web Application Firewalls(WAF)

Employ a WAF to filter out malicious requests targeting your web app and APIs.

Conclusion

SQL Injection remains a persistent threat. But with the right tools and knowledge, developers can protect their applications from this age-old risk. Whether you’re developing web apps or APIs, understanding SQLi is crucial.

It is a few basic principles – validate your input, use prepared statements – make it a standard practice.

For more insights, tutorials, and a community of security-aware developers, visit BUZZ. Together, we will make security accessible to all!

Scroll to Top