Neuigkeiten:

still alive...

Hauptmenü

Eingaben überprüfen

Begonnen von haraldos, 03. September 2005, 07:29:05

Vorheriges Thema - Nächstes Thema

haraldos

Weil es immer wieder mal angesprochen wird:
wie überprüft man sinnvollerweise Daten, also zum Beispiel das, was über die Browserzeile übergeben wird? Wie sieht es mit Formulardaten aus?
Ich würde gerne wissen, was man tun kann (oder muss), um sich gegen unerwünschte Eingriffe von außen, also z.B. gegen Manipulation der übergebenen Paramter, schützen kann.
Danke und Gruß, Haraldos
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

Hallo,
eines vorneweg: für soetwas bieten sich die Scripte von Powie, sowie Scripte von anderen Forensystemen, CMS \'en (Mambo) etc., welche eine Benutzterprüfung haben, gut an, um da den Quellcode zu erkunden. Es ist oft verblüffend, wie die Leute manches bewerkstelligen. Aber nicht nur Str + C und Str + V /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />
wie überprüft man sinnvollerweise Daten, also zum Beispiel das, was über die Browserzeile übergeben wird?[/quote]
Wenn du die Richtigkeit prüfen willst, also ob sie auch das enthalten, was du erwartest (Bsp.: E-Mailadresse - immer ein @ und ein dot + Endung), solltest du nach wichtigen Zeichen suchen. (substr) Sind dann einige (für dich) wichtige nicht vorhanden, dann könntest du bspw. abbrechen und den User darauf hinweisen.
Geht es hingegen um das, was sie enthalten und ob es vertrauenswürdig ist, dann wäre auch ein substr, strpos, oder ähnliches angebracht, um sie bspw. nach MySQL-typischen Zeichen zu durchsuchen, um SQL Injections zu verhindern.
Wichtig ist auch, das du bei Daten, welche du bspw. in einer Datenbank speicherst und später wieder ausgibst, vor dem speichern eventuelle HTML Tags killst (htmlspecialchars?) oder gar solche Eingaben komplett blockst. In Foren, Gästebüchern etc. wäre soetwas angebracht. Mir hat mal einer ein Testforum tagelang zerschossen, weil ich es nicht gemacht habe. Es war aber nicht böswillig, sondern von einem Freund, der mir helfen wollte, nur habe ich es nicht gleich ernst genommen, bis ich dann mal mein Forum besucht habe^^  
um sich gegen unerwünschte Eingriffe von außen, also z.B. gegen Manipulation der übergebenen Paramter, schützen kann.[/quote]
*Grübel* Hier vielleicht ein paar Hinweise nur:
- alle Variablen, welche du von außen bekommst, also von denen du *weißt*, das du sie bekommst, immer vor dem Benutzten prüfen - besonders wichtig bei Vars, welche in ein SQL Statement eingebaut werden!
Prüfe auf u.a. auf \" \' \", \" \" \", \"select\", \"=\".
 
- strukturelles Überprüfen von Eingaben (Variablen): haben sie keinen bestimmten Aufbau, dann *block*
- nur weil du etwas in einer Session speicherst, ist es nicht gleich unantastbar, also auch hier aufpassen
- keine Übergabe der Variablen per GET - also verberge soviel vor dem User, wie möglich. Hidden-Fields sind deine Freunde
 
Ich hoffe, das ich dir ein wenig weiterhelfen konnte.
 
kOOni

Powie

Und niemals vergessen: Dabei gibt es nie einen \"Standard\" Weg wie man das machen kann. Denn es spielt immer eine Rolle wie man diese Daten weiterverwendet.
Ich selbst habe mir mittlerweile eine Filterfunktion gebaut die ich bald überall einsetzen werde. Diese ist zwar schon relativ flexibel, aber es gibt immer wieder Fälle wo auch diese nicht hilft und man die Datenh für den speziellen Fall einzeln abprüfen muss. Dann gibt es wieder Fälle wo du dich garnicht drum kümmern musst, da die Daten so wie sie sind sowieso sicher sind.

haraldos

Erstma dank Euch beiden, Wochenende war und so komm ich erst jetzt wieder dazu...
Mach ich mal ein Beispiel:
ein Formular ruft sich nach dem abschicken wieder selber auf, nach dem \"submit\" wird allerdings ein Parameter hinzugefügt, der eine bestimmte Aktion bewirken z.B. über eine \"switch\" Anweisung bewirken soll. Quick and dirty:

\";
break;
?>

 
 
Im Idealfall wird nie was passieren, aber böse Buben können natürlich die Url mit ?action=2 aufrufen was nicht passieren sollte (Bitte jetzt keine Bemerkungen, warum es action=2 überhaupt gibt...).
Im Netz geistern immer wieder Konstrukte a la:
 

 
oder so ähnlich herum, häufig genannt in diesem Zusammenhang. Nur genau dies kapiere ich nicht so recht, weder wie damit überhaupt etwas überprüft werden soll/kann,  noch was dergleichen überhaupt bewirken soll...
Deswegen wäre es nett, wenn mir das jemand mal generell etwas näher bringen kann, evtl ein Link zu einer guten Erkärung im Netz täte mir schon reichen.
Danke und Gruß
Haraldos
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

all your base are belong to us / Discord