SQL Injection: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Der Seiteninhalt wurde durch einen anderen Text ersetzt: „*[SQL Injection Datenabfrage]]“)
Markierung: Ersetzt
Zeile 1: Zeile 1:
−
=Vorüberlegung=
+
*[SQL Injection Datenabfrage]]
−
==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=
 
−
<pre>
 
−
    $search = $_POST['search'];
 
−
    $sql = "SELECT * FROM users WHERE username='$search'";
 
−
    $result = mysqli_query($link, $sql);
 
−
</pre>
 
−
;Diese Eingabe bewirkt nun
 
−
 
 
−
[[Datei: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=
 
−
[[Datei:Sql-injection-1.png]]
 
−
=PHP Code sicher=
 
−
<pre>
 
−
  $search = mysqli_real_escape_string($link, $_POST['search']);
 
−
  $sql = "SELECT * FROM users WHERE username='$search'";
 
−
  $result = mysqli_query($link, $sql);
 
−
</pre>
 
−
 
 
−
 
 
−
Das Sicherheitsproblem wird also dadurch verursacht, dass eine Benutzereingabe ungeprüft bzw. unverarbeitet weiter benutzt wird.
 
−
 
 
−
Bei der sicheren Methode wird die Benutzereingabe nicht direkt übergeben.
 
−
 
 
−
In diesem Beispiel wird eine php-Funktion benutzt, die dafür sorgt, dass Sonderzeichen entwertet werden
 
−
 
 
−
So wird eine sicherere SQL Abfrage gebildet.
 
−
 
 
−
Die an die Datenbank geschickte Abfrage sieht in diesem Fall so aus:
 
−
 
 
−
SELECT * FROM users WHERE username='\'or\'1\'=\'1'
 
−
 
 
−
Prinzipiell sollten alle Daten die von Außen kommen als unsicher angesehen werden und niemals ohne eine Prüfung und/oder Bearbeitung weiterverwendet werden.
 

Version vom 15. Juni 2021, 19:30 Uhr

  • [SQL Injection Datenabfrage]]