Hallo Zusammen,
ich mal wieder und gleich mit einer Frage ;-) Da ich jetzt mal wieder was in PHP schreiben müßte, was ich aber länger schon nicht mehr getan habe, habe ich als Fingerübung zum "Wiederwarmwerden" mal ein kleines Gästebuchscript geschrieben.
Selbiges kann ich mangels FTP-Zugang gerade nirgendwo online stellen und will auch nicht die rund 200 Zeilen Code hier pasten (kann es aber auf Wunsch gerne tun), aber mich würde mal _grundsätzlich_ interessieren, was man so sicherheitshalber alles bedenken sollte.
Also: Pflichtfelder-Check erfolgt mit Javascript (klar, kann man abschalten, aber dann werden im Zweifelsfall eben nur leere Werte in die DB geschrieben - das ist kein Sicherheitsproblem). Die Prüfung zusätzlich mit PHP zu realiseren wäre einfach.
Auf Benutzereingaben wende ich folgendes an (außer Punkt 2, den nur da wo notwendig):
1. Leerzeichen am Anfang und am Ende entfernen (trim())
2. Falls die URI der Homepage ohne führendes "http://" eingegeben wurde, wird selbiges vor die URI eingefügt. Sollte man die angegebene URI auf Erreichbarkeit prüfen?
3. HTML-Tags entfernen (strip_tags())
4. Über die IP-Adresse wird ein erneutes Absetzen eines Eintrages (F5-Taste im IE oder Absicht) für einen frei definierbaren Zeitraum gesperrt (derzeit 300 Sekunden) - wenn zwei Benutzer die hinter ein und denselben Proxy sitzen posten wollen, habe ich natürlich ein Problem - kennt einer eine bessere Lösung? Session-Handling fände ich fast übertrieben und ist doch auch durch "Browser schließen, Browser öffnen" zu umgehen, oder?
Da das komplette Script in einer Datei enthalten ist, gebe ich in der URL einen Parameter mit um kenntlich zu machen, ob beim Aufruf etwas in die DB geschrieben werden soll oder nicht (?insert=yes). Der Parameter kann nat. einfachst manipuliert werden, allerdings gibt es nur diesen einzigen erlaubten Wert, weicht er ab, wird nichts in die DB geschrieben und es werden nur die bisherigen Einträge gezeigt.
Weiterhin gebe ggf. ich zum Blättern zwei Parameter in der URL mit (start und limit in der SQL-Query), sollten diese manipuliert werden, kann dann etas außer einer evtl. ungültigen Abfrage Passieren?
Also: Habe ich grundsätzlich 'was vergessen, gibt es etwas an an das man unbedingt noch denken sollte?
Habe noch nie ein Script für den "Masseneinsatz" in der bösen weiten Welt geschrieben, daher habe ich mich noch nie mit solchen Sicherheitsproblemem auseinandersetzen müssen - dies nur als pauschale Vorabentschuldigung falls ich was ganz selbstverständliches vergessen haben sollte ;-)
Greetz,
Andreas
sh:( fo:) ch:| rl:| br:> n4:# ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:<