Sql-Injection-Proof-of-Concept: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „=Unsichere Methode= <pre> <?php if(isset($_POST['submit'])){ //connect db include "inc/connect.php"; //unsafe query $search = $_POST['search'…“) |
|||
(36 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | = | + | =Test Seite= |
− | + | *[[SQL Injection Vorbereitung]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | =Unsichere Seite= | |
− | + | ==Abfrage== | |
− | + | ;ins Suchfeld | |
− | + | *' or '1' = '1 | |
− | + | [[Datei:sql-injection-1.png]] | |
− | + | ||
− | + | ==Einfügen eines Datensatz== | |
− | + | ;ins Suchfeld | |
− | + | *' ; insert into users values('8','wauzi','streng'); -- | |
− | + | ;Dann die Abfrage ins Suchfeld | |
− | + | *' or '1' = '1 | |
− | + | ||
− | + | =Sichere Seite= | |
− | + | [[Datei:sql-injection-2.png]] | |
− | + | =Erläuterung= | |
− | + | ==Unsichere Methode== | |
− | + | ;Bei der Unsicheren Methode wird folgender Query abgesetzt. | |
− | + | ||
− | + | *SELECT * FROM users WHERE username='$search'; | |
− | + | ||
− | + | ;Wenn wir in die Variable $search folgendes schreiben: | |
− | + | ||
− | + | $search = ' or '1' = '1 | |
− | + | ||
− | + | ;wird folgender Suchausdruck gebildet: | |
− | + | ||
− | + | *SELECT * FROM users WHERE username=' ' or '1' = '1'; | |
− | + | ||
− | + | ;da der 2. Ausdruck wahr ist, wird die ganze Tabelle ausgegeben. | |
+ | |||
+ | ==Sichere Methode== | ||
+ | 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. |
Aktuelle Version vom 1. März 2024, 11:21 Uhr
Test Seite
Unsichere Seite
Abfrage
- ins Suchfeld
- ' or '1' = '1
Einfügen eines Datensatz
- ins Suchfeld
- ' ; insert into users values('8','wauzi','streng'); --
- Dann die Abfrage ins Suchfeld
- ' or '1' = '1
Sichere Seite
Erläuterung
Unsichere Methode
- Bei der Unsicheren Methode wird folgender Query abgesetzt.
- SELECT * FROM users WHERE username='$search';
- Wenn wir in die Variable $search folgendes schreiben
$search = ' or '1' = '1
- wird folgender Suchausdruck gebildet
- SELECT * FROM users WHERE username=' ' or '1' = '1';
- da der 2. Ausdruck wahr ist, wird die ganze Tabelle ausgegeben.
Sichere Methode
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.