What is SQL Injection and how to fix it

by bootsity on Jun 4, 2019 Philosophy 1110 Views

1. Introduction

In this article, we learn about SQL injection security vulnerability in web application. We see an example of SQL Injection, learn in in-depth how it works, and see how we can fix this vulnerability. We use PHP and MySQL for the examples. The SQL injection is the top exploit used by hackers and is one of the top attacks enlisted by the OWASP community.

2. What is SQL Injection

SQL Injection is a attack mostly performed on web applications. In SQL Injection, attacker injects portion of malicious SQL through some input interfaces like web forms. These injected statements goes to the database server behind a web application and may do unwanted actions like providing access to unauthorised person or deleting or reading sensitive information.
The SQL Injection vulnerability may affect any application powered by database supporting SQL like Oracle, MySQL and others.
SQL Injection attacks are one of the widest used, oldest, and very dangerous application vulnerabilities. The OWASP organization (Open Web Application Security Project) lists SQL Injections in their OWASP Top 10 document as the top threat to web application security.

3. Example of SQL Injection

Let’s create a form in HTML:

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h2>SQL injection in web applications</h2>
  5. <form action="/form-handler.php">
  6. Username:<br>
  7. <input type="text" name="username" value="">
  8. <br>
  9. Password:<br>
  10. <input type="password" name="password" value="">
  11. <br><br>
  12. <input type="submit" value="Submit">
  13. </form>
  14. </body>
  15. </html>

When we click on submit, the form above submits to below PHP script:

  1. <?php
  2.  
  3. mysql_connect('localhost', 'root', 'root');
  4. mysql_select_db('bootsity');
  5.  
  6. $username = $_POST["username"];
  7. $password = $_POST["password"];
  8. $query = "SELECT * FROM Users WHERE username = " . $username . " AND password =" . $password;
  9.  
  10. $re = mysql_query($query);
  11.  
  12. if (mysql_num_rows($re) == 0) {
  13. echo 'Not Logged In';
  14. } else {
  15. echo 'Logged In';
  16. }
  17. ?>

4. How SQL Injection works

In the above example, assume that the user fills up the form as below:

  1. Username: ' or '1'='1
  2. Password: ' or '1'='1

Now our $query becomes:

SELECT * FROM Users WHERE username='' or '1'='1' AND password='' or '1'='1';

This query always returns some rows and results in printing Logged In on the browser. So, here the attacker doesn’t know any username or password that are register in the database, but the attacker is still able to log in.

5. Fixing SQL Injection

Now we understand how SQL injection works in PHP. Generally, the best solution is to use prepared statements and parameterized queries. When we use prepared statements and parameterized queries, the SQL statements are parsed separately by the database engine. Let us see these approaches below:

5.1 Using PDO

We can change our form-handler.php to use PDO:

  1. <?php
  2.  
  3. $dsn = "mysql:host=localhost;dbname=bootsity";
  4. $user = "root";
  5. $passwd = "root";
  6.  
  7. $pdo = new PDO($dsn, $user, $passwd);
  8.  
  9. $username = $_POST["username"];
  10. $password = $_POST["password"];
  11.  
  12. $stmt = $pdo->prepare('SELECT * FROM Users WHERE username = :username AND password = :password');
  13.  
  14. $stmt->bindParam(':username', $username);
  15. $stmt->bindParam(':password', $password);
  16.  
  17. $stmt->execute();
  18.  
  19. if (count($stmt) == 0) {
  20. echo 'Not Logged In';
  21. } else {
  22. echo 'Logged In';
  23. }
  24.  
  25. https://article-realm.com/article/Reference-Education/Philosophy/2509-What-is-SQL-Injection-and-how-to-fix-it.html

URL

https://bootsity.com/php/what-is-sql-injection-and-how-to-fix-it
Tutorial article to describe SQL Injection vulnerability in web application with example in PHP and MySQL

Comments

No comments have been left here yet. Be the first who will do it.
Safety

captchaPlease input letters you see on the image.
Click on image to redraw.

Reviews

Guest

Overall Rating:

Statistics

Members
Members: 17155
Publishing
Articles: 79,607
Categories: 202
Online
Active Users: 3763
Members: 0
Guests: 3763
Bots: 15636
Visits last 24h (live): 11875
Visits last 24h (bots): 54850

Latest Comments

I've always thought store management games were about spreadsheets and quarterly reports. But I've discovered something fascinating while playing arcade physics runners – specifically the slope...
on Oct 6, 2026 about Familiarize The Process Of SEO
Drift Boss stands out as a perfect example of how simple mechanics can create an incredibly intense experience. It's not horror in the traditional sense, but the mounting tension, the constant...
Step into a timeless European fairy tale within our castle-inspired turret suite, complete with exposed stone and rich tapestries. Relish a private orchestral recital performed exclusively for you...
Commercial product information from Denis on behalf of SoSexDoll: our BBW companion-doll collection is intended exclusively for adults. Individual model pages list the material, dimensions, weight...
on Oct 5, 2026 about willy
" '훌륭한 유용한 리소스를 무료로 제공하는 가격을 알 수있는 웹 사이트를 보는 것이 좋습니다. 귀하의 게시물을 읽는 것이 정말 마음에 들었습니다. 감사합니다! 훌륭한 읽기, 긍정적 인 사이트,이 게시물에 대한 정보를 어디서 얻었습니까? 지금 귀하의 웹 사이트에서 몇 가지 기사를 읽었으며 귀하의 스타일이 정말 마음에 듭니다. 백만명에게 감사하고...
" '훌륭한 유용한 리소스를 무료로 제공하는 가격을 알 수있는 웹 사이트를 보는 것이 좋습니다. 귀하의 게시물을 읽는 것이 정말 마음에 들었습니다. 감사합니다!   크롬하츠 토토    
" '훌륭한 유용한 리소스를 무료로 제공하는 가격을 알 수있는 웹 사이트를 보는 것이 좋습니다. 귀하의 게시물을 읽는 것이 정말 마음에 들었습니다. 감사합니다!   크롬하츠벳    
" '훌륭한 유용한 리소스를 무료로 제공하는 가격을 알 수있는 웹 사이트를 보는 것이 좋습니다. 귀하의 게시물을 읽는 것이 정말 마음에 들었습니다. 감사합니다! 훌륭한 읽기, 긍정적 인 사이트,이 게시물에 대한 정보를 어디서 얻었습니까? 지금 귀하의 웹 사이트에서 몇 가지 기사를 읽었으며 귀하의 스타일이 정말 마음에 듭니다. 백만명에게 감사하고...
Discover the difference with our exclusive Escorts in Gurgaon that sets the standard for excellence. Our Call Girls are not just visually stunning but also skilled in the art of pleasure....
이러한 유익한 웹 사이트를 게시하는 데 아주 좋습니다. 웹 로그는 유용 할뿐만 아니라 창의적이기도합니다.  타잔토토  

Translate To: