Sql-Injection-Proof-of-Concept: Unterschied zwischen den Versionen

Aus xinux.net
Zur Navigation springen Zur Suche springen
Zeile 25: Zeile 25:
  
 
=Sichere Methode=
 
=Sichere Methode=
<pre>
 
<?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>
 
</pre>
 

Version vom 7. Oktober 2020, 17:00 Uhr

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