CUCM Logo
Do  25.04.2019CompUser Club Mainspitze e.V.https://www.google.de/maps/place/Moselstraße+21,+65428+Rüsselsheim/@49.9909897,8.4162473,20z/data=!4m2!3m1!1s0x47bd99327b0f7cb9:0x7450272f33dc29e065428 RüsselsheimMoselstrasse 21
Do  25.04.2019CompUser Club Mainspitze e.V.https://www.google.de/maps/place/Moselstraße+21,+65428+Rüsselsheim/@49.9909897,8.4162473,20z/data=!4m2!3m1!1s0x47bd99327b0f7cb9:0x7450272f33dc29e065428 RüsselsheimMoselstrasse 21
Fr  26.04.2019CompUser Club Mainspitze e.V.https://www.google.de/maps/place/Moselstraße+21,+65428+Rüsselsheim/@49.9909897,8.4162473,20z/data=!4m2!3m1!1s0x47bd99327b0f7cb9:0x7450272f33dc29e065428 RüsselsheimMoselstrasse 21
 

Blog: PHP Sicherheit #1: SQL Injection - Angriff auf die Datenbank

Autor: Nick   Kommentare (0)   Kurz URL: -   Bei Twitter speichern   Bei Facebook speichern   Bei Digg speichern   Bei Delicious speichern   Bei Mr. Wong speichern   Bei Google Bookmarks speichern
24.07.2012
SQL Injection ist nach wie vor eine der Hauptmethoden, wenn es um Datendiebstahl geht. Was ist SQL Injection und wie schützt man als Entwickler seinen Code davor?

Rechtlicher Hinweis:
Bevor sich jemand durch den Artikel angespornt fühlt, das Wissen an fremden Webseiten auszuprobieren, sollte sich bewusst sein, das dies (straf)rechtliche Konsequenzen nach sich führen kann.

Was ist SQL Injection?

Der Angreifer versucht bei SQL Injection, die Datenbankabfrage einer (Web) Anwendung um eigene Datenbankbefehle zu erweitern. So ist es das Ziel des Hackers, die volle Kontrolle über die Datenbank zu erlangen, um Daten auszulesen, zu manipulieren oder schlicht zu löschen.

Ein Beispiel für SQL Injection anfälligen Code:
§result = mysql_query("SELECT * FROM users WHERE username = '". $_GET['username'] ."'");

Die Sicherheitslücke entsteht dadurch, das die Benutzer Eingaben ungeprüft und unmaskiert direkt an die Datenbank weitergeleitet werden. Solange die Benutzer normale Eingaben machen, ist das kein Problem. Was passiert aber wenn z.B. "'; UPDATE users SET type='admin' WHERE username='ich';" eingegeben wird?

Dann würde folgendes Query an die Datenbank geschickt werden:
"SELECT * FROM users WHERE username = ''; UPDATE users SET type='admin' WHERE username='ich';"

Dem Query aus der Anwendung wurde ein zweiter Datenbankbefehl untergeschoben, um einen Benutzer zum Admin zu erheben.

Schutz vor SQL Injection

Die eingegebenen Daten müssen entsprechend maskiert (escaped) werden. Das heisst alle Datenbank spezifischen Sonderzeichen müssen passend umgeschrieben werden. Für diese Aufgabe gibt es bereits einige Datenbank spezifischen Funktionen wie etwa mysql_real_escape_string.

Beispiel für die Verwendung von mysql_real_escape_string()
§result = mysql_query("SELECT * FROM users WHERE username = ".
"'". mysql_real_escape_string($_GET['username']) ."'");


Noch besser ist die Verwendung von prepared Statements und der PDO Klasse. Das Query wird kompiliert und dabei werden Platzhalter für die Daten im Query gebunden. Das heisst, die Benutzerdaten werden nicht mehr als möglicher SQL Befehl interpretiert, sondern nur noch korrekt an den entsprechenden Spalte eingefügt. Ausserdem lässt sich je nach Datenbank unter Umständen eine Performance Steigerung erzielen, insbesondere wenn das selbe Query mit unterschiedlichen Daten ausgeführt werden soll.

Beispiel für ein prepared Statement
$sth = $dbh->prepare("SELECT * FROM users WHERE username = ?");
$sth->execute(array($_GET['username']));
$result = $sth->fetch(); // oder $sth->fetchAll();


Hinweis
Die notwendigen, zusätzlichen Eingabe Überprüfungen sind im Beispiel der Übersichtlichkeit geopfert.]

Zur Artikel Übersicht PHP Sicherheit


Den Artikel empfehlen

Ähnliche Blog Beiträge

PHP Sicherheit: Wie wird PHP Code gehackt

http://www.cucm.de/blog/115/php_sicherheit_wie_wird_php_code_gehackt/
24.07.2012 - Quasi kein Tag vergeht, ohne das über Webseiten Einbrüche und gestohlene Daten berichtet wird. Die Methoden der Hacker sind stehts gleich und bereits mit wenigen Massnahmen ausser Gefecht gesetzt.  Weiter lesen

Weitere Blog Artikel vom Compuser Club

Dem Computer Club folgen und über Neuigkeiten informiert werden:

RSS Feeds RSS Feeds   CUCM @ Twitter Twitter   CUCM @ Facebook Facebook   CUCM @ Google+ Google+
 
Bislang wurde kein Kommentar zu diesem Beitrag abgegeben. Sei erster!
 

Kommentar Verfassen

 
(erforderlich)
 
(erforderlich)
Ihre E-Mail Adresse wird nicht auf der Seite veröffentlicht. Sie dient ausschliesslich der möglichen Kontaktaufnahme unserseits.
 
 
 
 

3) Hinweis zur Freischaltung

Um Spam Missbrauch zu verhindern, werden alle Kommentare zuerst von uns geprüft. Daher kann es einen Augenblick dauern, bis Ihr Kommentar auf unserer Webseite erscheint. Spam oder was wir dafür halten, wird unsererseits kommentarlos gelöscht.
To avoid Spam on our Page, we check all Comments before publish. So save you and us Time and dont Spam.


CompUser Club Mainspitze e.V.   |  65428 Rüsselsheim   |  Moselstrasse 21 (Post Gebäude: 1. Stock)