Hello Chris L.,
Bin PHP Anfänger und programmiere eine Art Content Management System. Habe mich nun erstmals in das Thema Sicherheit eingelesen und würde mich freuen, wenn jemand meine Schlussfolgerungen anschaut, um sicher zu gehen, dass ich nichts wichtiges überschaut habe.
Ich weiß, man will immer gleich 'was Großes anstreben, aber fang doch erstmal mit den Basics an:
1. Einfache Ausgaben, Daten aus Textdateien HTML-gerecht aufbereiten und ausgeben
2. Post und Get mit Formularen und URi, Daten auis dem Request übernehmen und dann
als Response HTML-gerecht darstellen in HTML/plain, Tabellen, Input-Elementen,
usw.
3. Zähler aufbauen und anzeigen, Arbeiten mit Datei, was ist eine Race-Condition?
4. Das Affenformular, _der_ Meilenstein in der Lernhistorie eines Webprogrammierers
5. Umgang mit Dateien, Gästebuch schreiben, mehrseitige Formulare, Überprüfungen
von Eingaben, Stringfunktionen, Ersetzungsfunktionen, Einfügen in Dateien (z.B.
Admin-Kommentare im Gästebuch), Dateiformate, usw.
6. Datenbanknutzung
und dann solltest Du langsam laufen können... :-))
Also erstmal habe ich Textfelder, die ich per POST übergebe. Die Textfelder sind reine Texteingaben, einmal normal und einmal mehrzeilig.
Stelle diese in der response-Seite dar und schau Dir an, was passiert
Ich denke hier braucht es den Befehl strip_tags()
Das kommt auf den Sinn an, den die Eingaben haben sollen. Wenn jemand über die Textbox HTML-text erfassen will/soll, dann wäre es doch unsinnig, die eingegebenen Daten (Tags) zu entfernen.
Versuche als erstes, Daten unverändert nutzbar zu machen.
Um Daten, die HTML-Zeichen enthalten können, wieder im HTML-Kontext ausgeben zu können, benötigst Du nur die Funktion htmlspecialchars() http://de2.php.net/manual/en/function.htmlspecialchars.php
und die Angabe, dass es sich um Preformatted Text handelt <pre> ... </pre>
und zusätzlich bei mehrzeilig nl2br().
Wenn Du den text dann HTML-formatiert ausgeben willst, sind die Funktionen
nl2br() http://de2.php.net/manual/en/function.nl2br.php
wordwrap() http://de2.php.net/manual/en/function.wordwrap.php
zusätzlich zu htmlspecialchars() http://de2.php.net/manual/en/function.htmlspecialchars.php
nützlich.
Bei einem spezifischen Fehler (rest ist mit JavaScript plausibilisiert) kommen die Daten mit GET wieder zurück ins Formular. Ich denke hier brauchts nur br2nl() bei mehrzeilig.
Die Funktion kenne ich nicht und warum Du jetzt auch schon anfängst, JavaScript ins Spiel zu bringen, wo Du gerade erst PHP lernen willst, verstehe ich auch nicht.
Ob die Daten als GET- oder als POST-Parameter übergeben werden, hängt von der Gestaltung des Sokumentes und vom Verhalten des Users ab. Ins "Formular" kommen sie aber immer nur durch die Art der Programmierung auf dem Server und werden mit diesem zusammen als HTTP-Response auf einen Request ausgeliefert. Was dann am Client damit geschieht, liegt nicht im Einflussbereich des PHP-Programmes.
OK, dann kommen die Daten in eine SQL Datanbank. Hierfür mysql_real_escape_string(). Habe gelesen, wenn die Server Funktion magic_quotes_gpc auf ON ist (bei mir der Fall), muss vorher noch stripslashes() angewendet werden.
Schalt doch Magic Quotes einfach ab. Das geht auch oft in einer .htaccess-Datei oder einer eigenen php.ini, je nachdem, ob PHP als Modul oder als CGI läuft.
Schliesslich lese ich die Daten in der SQL-DB und gebe diese aus. Hierfür zuerst addslashes() (weil vorher entfernt) und dann noch htmlspecialchars().
Warum willst Du etwas Unsinniges wieder hinzufügen, was Du vorhin gerade mühevoll entfernt hast?
Könnt ihr mir sagen, ob das soweit richtig ist oder ob was wichtiges fehlt?
Übung, Übung, Übung...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)
