PHP absichern

So wird PHP sicherer

Beugen Sie SQL-Injektionen vor

SQL-Injektionen schleusen bei Abfragen zusätzliche Werte ein, die an die Datenbank übergeben werden. Ist das Script nicht geschützt, kann ein Angreifer schlimmstenfalls Daten auslesen. Verringern können Sie dieses Risiko durch die Verwendung des PHP-Moduls Mysqli. Um etwa aus einer Tabelle „mitglieder“ einen Benutzernamen auszulesen, sieht der Aufruf so aus:

$username = mysqli_real_escape_string( $GET['username'] );
mysql_query("SELECT * FROM mitglieder WHERE username = ' ".$username." ' ");

Mysqli prüft die Gültigkeit eingegebener Parameter und verhindert SQL-Injektionen.

Mysqli nutzt Prepared Statements: Dabei erhält die Abfrage Platzhalter an den Stellen, wo Variablen gelesen oder übergeben werden sollen. Dies lässt sich auch manuell durch entsprechenden Code erzielen und sieht im Prinzip so aus:

$stmt = $db->stmt_init();
$stmt = prepare( "SELECT * FROM mitglieder WHERE id = ?" );
// Statement an Parameter binden. i steht fuer Integer
$stmt->bind_param( "i", $id );
// Statement ausfuehren
$stmt->execute();

Dieses Beispiel fragt das Feld „id“ in der Datenbank ab. Genutzt wird dann innerhalb des Statements die Variable „$id“.