Zum Inhalt springen

[PHP] Datenbanksicherheit bei Strings


Empfohlene Beiträge

Hallo folgendes Zitat aus dem PHP-Handbuch zum Thema "Datenbanksicherheit"

Escapen Sie jeden nicht numerischen Input, welcher zur Datenbank weitergereicht werden soll mit addslashes() oder addcslashes(). [...] Wie dieses Beispiel zeigt, sind in den statischen Teil der Abfrage eingebrachten Escapes nicht genug, und können leicht gehacked werden.

Kann mir das jemand näher erläutern? Wieso sind Zeichen wie \n in einem String in der Datenbank gefährlich?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Zeichen selbst sind in der Datenbank nicht gefährlich, nur das direkte Übergeben von Benutzereingaben.

Wenn Du z.B. in einer SQL-Abfrage Hochkommatas zum Angeben von Feldwerten verwendest ( feld = '".$wert."'), dann dürfen keine ' in der Variable Wert vorkommen, da sonst die Grenzen des Wertes nicht mehr eindeutig sind...

Um dem abzuhelfen sollte man (bei mySQL z.B.) jeden vom Benutzer eingegeben String mit feld = '".mysql_escape_string($wert)."' in das SQL-Statement einbauen.

Im schlimmsten Fall ist es auch möglich so die SQL-Abfrage zu den Gunsten eines Angreifers abzuändern...

Edit: Ergänzungen und anschauliche Beispiele erwünscht :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

mysql_query("INSERT INTO Tabelle(Name) VALUES(" . $name . ")";

Dann hat der "Angreifer" im schlimmsten Falle bei Name eingeben:

Michael); DELETE * FROM Name WHERE (1=1

Und deine Tabelle Name ist leer...wenn die SQL-Statements getrennt durch das ; auch beide ausgeführt werden...

Aber ich bezweifle, dass Dein Statement überhaupt funktioniert, da der String nicht Maskiert ist...

Edit: Neben der Verwendung von mysql_escape_string() ist es auch sehr ratsam, die Eingaben eines Benutzers selbst vor der Verarbeitung im Script zu überprüfen, z.B. mittels regulärer Ausdrücke...

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich habe das mal getestet. Konnte aber keine Fehlfunktion hervorrufen.

(php 5.0.3 & MySql 4.1.10)

Es wurde dann immer als Inhalt sowas wie "DELETE * FROM Tabelle"

als Text in der Datenbank gespeichert.

Falls man eine Einflussmöglichkeit auf die Datei php.ini hat, kann man auch den Schalter "magic_quotes_gpc = off" auf "magic_quotes_gpc = on" stellen.

aus der Wikipedia Seite

Das ist glaub ich standard, dass das an ist. (und dann geht das automatisch)

Zum Testen kannst du das ja mal ausschalten...

Und da du lieber davon ausgehen solltest, dass das mal aus sein kann, auch wenn es standard immer an ist, solltest du lieber eine Funktion um deinen String machen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

also habe diese magic_quotes mal auf off gestellt.

Konnte bisher nur Fehlermeldungen erzeugen, aber keine 'bösen' Querys einspeisen. Hab folgenden PHP-Code:

mysql_query("INSERT INTO namen (name) VALUES('" . $_POST["name"] . "')",$db);

Hab in das html-Textfeld schon folgendes eingegeben:

Name'; DELETE * FROM namen

aber irgendwie scheint die Anwendung trotz Sicherheitslücke sicher zu sein, oder?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es hängt auch stark davon ab, wie die PHP-eigenen mySQL-Funktionen reagieren, sprich, ob sie mehrere Statements durch Semikolon getrennt ausführen...oder ob mySQL an sich das macht...

Aber spätestens, wenn Du mal eine Datenbankklasse von Dritten benutzt, die genau dieses zulässt, hast Du das Problem...

Link zu diesem Kommentar
Auf anderen Seiten teilen

da fällt mir glatt noch etwas ein:

Wenn der String z.B. % enthält, hab ich auch ne größere Lücke, oder?

mysql_query("Delete Id, Name from Namen WHERE Name ='" . $name . "'");

wenn der $name == '%' habe ich ein Problem. Dann muss ich, wenn ich korrekt arbeiten will zusätzlich zu addslashes() auch noch solche Zeichen ersetzen z.B. mit regluären Ausdrücken?

Ich hoffe ich habe das jetzt verstanden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...