Sql-Injection-Proof-of-Concept

Aus xinux.net
Zur Navigation springen Zur Suche springen

Test Seite

Unsichere Seite

Sql-injection-1.png

Sichere Seite

Sql-injection-2.png

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>