Sven Rautenberg: PHP-Nuke: Sicherheitsleck

Beitrag lesen

Moin!

Da bin ich jetzt unsicher geworden.

Fein. Man sollte sich nie zu sicher fühlen. :)

Bei Eingabeformularen verwende ich natürlich immer das maxlength-Attribut, aber daß das natürlich nur als Empfehlung an den Besucher zu verstehen ist, ist mir auch klar. Wenn ich die eingabe dann aber in MySQL speichere, haben die Felder eben auch diese Länge. Der Rest sollte dann doch von MySQL weggeworfen werden (so habe ich das jedenfalls mal in einem Handbuch gelesen). Ist das korrekt, oder bedeutet es zusätzliche sicherheit, wenn ich den String vorher schon auf die entsprechende Länge kürze?

Erstmal zu PHP: Du kannst den Variablen keine maximale Länge zuweisen. Das ist gut, dann gibts vermutlich auch keine, die überschritten werden kann, und solange keine Bugs in PHP vorhanden sein, die zu lange Strings nicht ordentlich behandeln, hast du nichts zu befürchten (und könntest es im Zweifel ja auch nicht ändern, weil die Installation der richtigen PHP-Version Providersache ist. Blöd, wenn man sein eigener Provider ist - dann sollte man die News-Mailingliste der eingesetzten Programme abonniert haben.)

Und wenn mySQL laut Handbuch zu lange Angaben für Felder ignoriert, kann man auch davon ausgehen, daß dieses so geschieht.

Bei mySQL herrscht hingegen eine ganz andere Gefahr, daß im String enthaltene Anführungsstriche nicht maskiert werden.

Zum Glück gibts "magic_quotes", d.h. alle einfachen und doppelten Anführungsstriche, die vom Browser kommen, kriegen einen Backslash vorangestellt, damit mySQL geschützt ist. Denn sonst könnte man das typische SQL-Statement-Zusammenbasteln überrumpeln:
$sqlstatement="SELECT * FROM tabelle WHERE name='$name'";

Wenn $name jetzt folgenden Inhalt hat:
"irgendwas'; DELETE FROM tabelle; #"

dann wird das zusammengebastelt zu:
$sqlstatement="SELECT * FROM tabelle WHERE name='irgendwas'; DELETE FROM tabelle; #'";

Sehr unpraktisch. ;)

Bei welchen arten des Speicherns von daten kann es zu einem Buffer Overflow kommen? Man hört ja immer wieder davon, habe aber eigentlich noch nie daran gedacht, daß dies bei meiner art, PHP zu benutzen, auftreten kann.

Wie gesagt: Bei PHP kannst du davon ausgehen, daß sowas wie ein Buffer Overflow eher nicht existiert. Wenn, dann wird er hoffentlich schnell gefunden und ausgemerzt. Buffer Overflows kommen eher vor, wenn man C programmiert. Da muß man für die Eingaben noch eigenverantwortlich Platz schaffen - und der faule Programmierer denkt eben nur bis zur eigenen Tastatur, und nicht an Buffer Overflows.

In der Tat sind es, wie bei PHP sehr häufig zu sehen, meist unerfahrene Programmierer, die noch nicht mal auf die Idee kommen, "Ist das auch sicher?" zu fragen. Solange es mit den erlaubten Eingaben alles funktioniert, kann doch nichts passieren. Was ist aber, wenn man die Eingaben mal etwas über die spezifizierten Parameter hinaus dehnt, wird vernachlässigt.

Ich bin aktuell gerade bei einem Projekt bei, bei dem mit URL-Rewriting und PHP eine Site ausgegeben wird. Das ist grundsätzlich noch kein großes Problem. Interessant wird's, weil auch ein kleines Editing-System eingebaut ist und etwas konfus zwischendrin rumwuselt, mit Redirect, wenn der User angemeldet ist etc. Das ist wahrscheinlich noch nicht die Ideallösung, wenngleich eigentlich nur zwei Skripte existieren, eines für den Normaluser und eines für das Editing-System.

Im Prinzip funktionierts - auf meinem Win98-Testserver. Und wenn man ein wenig an den Eingabeparametern rumstrickt, ist es auch robust. Aber sicher bin ich mir da nicht unbedingt - da ist also noch Testarbeit und vor allem logisches Denken notwendig: Unter welchen Voraussetzungen würde welcher Programmteil was tun - und was könnte vielleicht ausgenutzt werden? Um das zu erkennen, ist zuallererst das Problembewußtsein notwendig. Und dann natürlich Erfahrung. Und gerade das ist nicht einfach, weil man, um sie zu gewinnen, eigentlich professioneller Hacker sein müßte, um abstruse Ideen zu erlangen, was man alles machen könnte, was nicht vorgesehen ist.

Ich bin kein Profi-Hacker, ich hoffe nur, mein Wissen reicht aus, die schlimmsten, offensichtlichsten Löcher nicht entstehen zu lassen. :)

- Sven Rautenberg