Sql-Injection-Proof-of-Concept: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Zeile 21: | Zeile 21: | ||
=Unsichere Methode= | =Unsichere Methode= | ||
− | + | *[[sql-injection-unsafe-php]] | |
− | + | *[[sql-injection-safe-php]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=Sichere Methode= | =Sichere Methode= | ||
<pre> | <pre> |
Version vom 7. Oktober 2020, 16:59 Uhr
Test Seite
Unsichere Seite
Sichere Seite
Erläuterung
- 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, wid die ganze Tabelle ausgegeben.
Unsichere Methode
Sichere Methode
<?php if(isset($_POST['submit'])){ //connect db include "inc/connect.php"; //safe query $search = mysqli_real_escape_string($link, $_POST['search']); //Database search $sql = "SELECT * FROM users WHERE username='$search'"; $result = mysqli_query($link, $sql); } ?> <!DOCTYPE html> <html> <body> <h2>SQL Injection</h2> <form method="post"> <label for="fname">Suche</label><br> <input type="text" name="search"><br> <input type="submit" name="submit" value="Suche"> </form> <br> <table border = "1"> <tr> <td>ID</td> <td>Name</td> <td>Passwort</td> </tr> <?php while ($row = mysqli_fetch_row($result)) { echo "<tr>"; echo "<td>".$row[0]." </td>"; echo "<td>".$row[1]." </td>"; echo "<td>".$row[2]." </td><br>"; echo "</tr>"; } ?> </table> </body> </html>