/tutorial-sql_injection.html SQL Injection - Datenbank Hacker
  PHP Kurs Logo  
 
Buttons PHP Kurs - Kapitel Trennlinie Downloads Trennlinie Was brauche ich ? Trennlinie Entwickler Jobs Trennlinie Kontakt Trennlinie Impressum Buttons
 
 
Menu
Allererste PHP Schritte
- Webserver Installation
- PHP Editor Installation

PHP Grundlagen
- PHP Grundwissen
- Mein erstes Programm
- Kommentare einfügen
- Variablen
- PHP+HTML mischen
- If Abfragen
- Rechenarten
- Arrays
- Schleifen
- Funktionen
- Klassen
- Includes
- Sessions und Cookies
- Login mit Sessions
- Login mit Datenbank
- Referer auslesen
- Wert aus Datenbank
- Variablen übergeben

MySQL Grundlagen
- Was ist das ?
- Erste Schritte
- Verbindung herstellen
- Einfache SQL Befehle
- SQL Injection

Häufig gefragt
- Was ist Adwords ?
- Interessante Links
- Wasserzeichen mod_rewrite
- Thumbnails erstellen
- PHP Gästebuch
- PHP Header
- Webseiten auslesen
- Socket Verbindungen
- E-Mail Adressen prüfen
- E-Mails versenden
- $_GET & $_POST
- Datenbank sichern
- Server DDOS Angriffe Abwehren
- Webhosting - Worauf ist zu achten ?
- Fachübersetzungen

Interessante Artikel
- Soft-Skill-Zertifizierung
- Sicherheits Workshops


SQL Injection - gehackte Datenbanken

Wie schütze ich mich gegen Datenbank Hacker und was sind Injections eigentlich genau ? Gerade Anfänger möchte ich für das Thema sensibilisieren, denn gewöhnt man sich erstmal einen Programmierstil an, bleibt man auch lange bei diesem. Eine SQL Injection macht man, indem man eine Webseite besucht und sich Sachen sucht die vermutlich mit der Datenbank zu tun haben. Man nehme zum Beispiel Gästebücher, Loginaufforderungen oder ähnliches. Hier verbergen sich die Gefahren.

Wie genau funktioniert Injection ?

Man ändert den SQL Befehl künstlich ab, so dass ein neuer Befehl entsteht und euer Skript führt diesen in der Datenbank aus, was verheerende Folgen haben kann. Jetzt fragt Ihr euch wie jemand eure SQL Befehle manipulieren kann, obwohl dieser keinen Zugriff auf eure Skripte hat.

Ein Beispiel:

Seite xy hat ein Loginformular, wo man den Usernamen und das Passwort eingibt. Im Formular werden per POST "username" und "passwort" übertragen, was der User eingibt. Nachdem der User seine Daten eingegeben hat, versucht euer Skript warscheinlich in der Datenbank nachzusehen, ob es diesen User gibt.

Gibt der User jetzt als Namen 12 ein und als Passwort 34, dann wird die SQL Abfrage so an MySQL geschickt:

SELECT * FROM kunden WHERE username="12" AND passwort="34";


Jetzt! gibt der User aber zum Beispiel als usernamen 12 ein und als Passwort gibt er 34" OR 1=1; - was passiert jetzt ? Er manipuliert die SQL Abfrage und kann so eigenen Code einschleusen - sich als Admin einloggen oder sonstige Dummheiten machen.

SELECT * FROM kunden WHERE username="12" AND passwort="34" OR 1=1;

Plötzlich liefert SQL Ergebnisse für den Login, ohne dass dies gewollt wäre.




Wie schütze ich mich gegen SQL Injections

Ein ganz einfaches Mittel, welches wir am Anfang des Kurses schon kennengelernt haben. Wir "escapen" einfach die Eingabe. Das ist wie mit echo("Hallo Welt"); - wenn wir da das Wort Welt in Anführungszeichen erscheinen lassen wollen, müssen wir die Anführungszeichen um das Welt escapen - mit \ ! Hierfür gibt es auch einen Befehl:

mysql_real_escape_string($text); escaped alle Zeichen in $text die so nicht stehenbleiben dürften.

<?php
$sql 
'SELECT * FROM kunden
    WHERE username="'
.mysql_real_escape_string($_POST['user']).'"
    AND passwort="'
.mysql_real_escape_string($_POST['pass']).'";';
?>

Neben dem mysql_real_escape_string($text); gibt es auch addslashes($text); zum escapen von Strings. Der mysql_real_escape_string($text);ist dem addslashes($text); allerdings vorzuziehen, da es dann keine unliebsamen Überraschungen gibt, wenn die Verbindung zur Datenbank mal ein anderes Charset hat.

Alternativ kann man die Injections nicht nur zum löschen einsetzen. Man kann sich auch mit anderen Usern einloggen und vieles anderes.

Dies ist nur eines von vielen Beispielen wie man versuchen kann Schaden anzurichten. Die Möglichkeiten sind weitreichend, wenn man erstmal so eine Schwachstelle entdeckt hat und ein addslashes(); kostet wirklich nicht viel Zeit und sollte der minimalste Schutz sein den man investiert.

Danke an Graf Zahl für die Tips !


Interessanter Artikel: SQL Injection Artikel auf MyWebSolution.de






<<<< zurück Kapitelauswahl vorwärts >>>>




Kommentare: (absteigend sortiert)

Hier stehen noch alte Kommentare, die direkt über die Webseite gemacht wurden. Es kann dort nicht weiter kommentiert werden. Bitte nutzt dafür die Facebook Kommentare.

.:: 29.01.12 - 16:52 Uhr :: Name: ProgBeginner ::.
Ich würde das NOCH anders machen. MySQL hat die Möglichkeit, die Inhalte auch bereits MD5 zu hashan.

SELECT * FROM kunden WHERE MD5(username) = md5($_POST['name']) AND MD5(passwort) = md5($_POST['passwort'])

.:: 20.06.10 - 14:10 Uhr :: Name: Charly ::.
Tja lieber qwe, ... das ist einfach der falsche Platz das auszuprobieren. Bei mir geht nichts ungefiltert in die Datenbank.

Gruß
Charly

.:: 18.06.10 - 15:46 Uhr :: Name: qwe ::.
<?php
$sql = 'SELECT * FROM kunden
WHERE username="'.mysql_real_escape_string($_POST['user']).'"
AND passwort="'.mysql_real_escape_string($_POST['pass']).'";';
?>









Content
 
  Bottom Design  


PepperTools.de Software Download | Software Shop
www.imilkowski.eu - Software Programmierung und Webdesign


 


Persönliche Empfehlung
Mit Wix.com eine kostenlose Homepage erstellen ? Einfach, schnell und ohne Vorkenntnisse.