Eingabe-/Inputkontrolle
Marc2
- php
0 Alex0 Fabian St.0 Andreas Korthaus0 Tom0 Tom
Hallo!
wie kann ich verhindern, dass jemand in mein textarea-Feld ausführbaren Code eingibt (ist dies überhaupt möglich, da der Code doch dann am Client eingegeben wird und nicht wie bei PHP üblich auf dem Server liegt ??? <- Anfängerfrage ;) ) und damit evtl. den Server lahm legt...
Kann mir jemand mal ein Beispiel nennen, wie ich input/textarea-Felder mit PHP (Javascript will ich nicht, da dies nicht immer aktiviert ist/bzw. umgangen werden kann) prüfen kann?
In Feld x soll z.B. nur ein Name (oder eine Emailadresse, Telefonnummer etc. ) möglich sein.
Muss man dann den String in Einzelbuchstaben aufteilen und dann mit ereg([1]...) jeden Buchstaben prüfen oder gibt es einfachere Möglichkeiten?
Marc
PS.: bei google hatte ich x-tausend-Treffer, was richtig brauchbares hoffe ich hier zu finden :)
a-z ↩︎
Hallo!
Hallo
wie kann ich verhindern, dass jemand in mein textarea-Feld ausführbaren Code eingibt (ist dies überhaupt möglich, da der Code doch dann am Client eingegeben wird und nicht wie bei PHP üblich auf dem Server liegt ??? <- Anfängerfrage ;) ) und damit evtl. den Server lahm legt...
Du speicherst den Inhalt der Textarea bestimmt in einer Variablen. Also wird der Inhalt als String interpretiert. Also keine Gefahr.
Kann mir jemand mal ein Beispiel nennen, wie ich input/textarea-Felder mit PHP (Javascript will ich nicht, da dies nicht immer aktiviert ist/bzw. umgangen werden kann) prüfen kann?
Nimm einfach die Funktion eregi(). Die Funktion erwartet 2 Parameter, Eingabemuster und String-Variable, die verglichen werden soll. Such mal im Internet nach "Reguläre Ausdrücke". Dann findest Du sicherlich was über Eingabemuster.
Hi!
wie kann ich verhindern, dass jemand in mein textarea-Feld ausführbaren Code eingibt (ist dies überhaupt möglich, da der Code doch dann am Client eingegeben wird und nicht wie bei PHP üblich auf dem Server liegt ??? <- Anfängerfrage ;) ) und damit evtl. den Server lahm legt...
Dazu gibt es schon spezielle PHP-Funktionen, z.B. htmlspecialchars(), oder htmlentities(). Die beiden Funktionen sind eigentlich identisch, bis auf den Punkt, dass htmlentities alle Zeichen, die HTML-Code-Entsprechungen haben, auch umwandelt, also aus 'ä' wird z.B. ä 'Ä' wird zu Ä.
Anzuwenden sind die Funktion also z.B. so:
$_POST['textarea'] = htmlentities($_POST['textarea']);
$_POST['textarea'] = htmlspecialchars($_POST['textarea']);
Außerdem solltest du stripslahes() drüber fahren lassen, wenn magic_quotes_gpc on ist.
In Feld x soll z.B. nur ein Name (oder eine Emailadresse, Telefonnummer etc. ) möglich sein.
Muss man dann den String in Einzelbuchstaben aufteilen und dann mit ereg([1]...) jeden Buchstaben prüfen oder gibt es einfachere Möglichkeiten?
Dazu musst du dir erst mal überlegen, was du als Name, Email, Telefonnummer definierst, also welche Zeichen erlaubt sind, wie lange, etc.
Ansonsten schau mal da: http://www.dclp-faq.de/q/q-formular-verarbeitung.html
Grüße,
Fabian St.
a-z ↩︎
Hallo!
wie kann ich verhindern, dass jemand in mein textarea-Feld ausführbaren Code eingibt (ist dies überhaupt möglich, da der Code doch dann am Client eingegeben wird und nicht wie bei PHP üblich auf dem Server liegt ??? <- Anfängerfrage ;) ) und damit evtl. den Server lahm legt...
Meinst Du mit "ausführbaren Code" PHP-Quelltext? Das kommt ganz drauf an was Du mit dem Code machst. PHP-Code wird nur ausgeführt, wenn der Code in einer Datei liegt, die durch den PHP-Interpreter läuft, so standardmäßig bei Scripten mit der Endung .php die über den Webserver aufgerufen werden, und bei Dateien die per include() in ein PHP-Script eingebunden werden. Wenn Du PHP-Code in einem Script nur ausliest, also z.B. aus einer Datenbank, oder per file()... dann wird der nur ausgeführt, wenn Du den extra durch eval() schickst, um eben dessen Ausführung zu erreichen. Wenn Du den PHP-Code allerdings nur per echo ausgibst, dann erscheint dieser Code halt eben auf der HTML-Seite. Vermutlich wirst Du den Code im Browser nicht sehen, weil dieser nmormalerweise keine Sachen zwischen < und > anzeigt (aber im HTML-Quelltext kannst Du den Code sehen).
Wenn man in ein Formularfeld eingegebenen PHP-Quellcode und HTML-Quellcode... sehen soll, dann solltest Du Strings vor der Ausgabe noch mit http://de3.php.net/manual/de/function.htmlentities.php bearbeiten, das hat auch den Vorteil dass sämtliche Versuche mit Javascript irgendwelchen Schaden bei anderen Besuchern anzurichten nicht funktionieren werden.
Kann mir jemand mal ein Beispiel nennen, wie ich input/textarea-Felder mit PHP (Javascript will ich nicht, da dies nicht immer aktiviert ist/bzw. umgangen werden kann) prüfen kann?
Was willst Du denn überprüfen? Solange Du den Text aus dem Eingabefeld nicht per include() einbindest, oder durch eval() schickst, musst Du Dir um den darin enthaltenen PHP-Code keine Sorgen machen. Javascript kann da erheblich unangenehmer sein. Sicher kann man es ausschalten, aber die meisten Leute haben es aktiviert. Wenn jemand ein böses Javascript in das Eingabefeld einschleust, und Du nichts dagegen unternimmst, wird dieses bei jedem Besucher ausgeführt, der sich die Seite mit diesem Text ansieht.
Gucke Dir mal hier (http://www.php-mag.de/itr/online_artikel/psecom,id,396,nodeid,62.html) den Abschnitt "Cross Site Scripting" an.
In Feld x soll z.B. nur ein Name (oder eine Emailadresse, Telefonnummer etc. ) möglich sein.
Wie man eine email-Adresse prüft steht z.B. hier: http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/
Sonst solltest Du Dich mal näher mit regulären Ausdrücken beschäftigen, vor allem den preg_* Funktionen.
siehe:
http://www.dclp-faq.de/q/q-formular-verarbeitung.html
http://www.dclp-faq.de/q/q-regexp-pruefen.html
http://tut.php-q.net/regex.html
Grüße
Andreas
Hello,
solange Du den Code nicht an eine aktive Schnittstelle (Datenbank, System-shell) übergibst, passiert damit nicht viel.
Um die Daten in einer SQL-Datenbank zu speichern, sind sie von PHP per default 'escaped', also bestimmte Zeichen mit Backslashes maskiert. Diese automatische Maskierung stellt aber nur einen allgemeinen Grundschutz dar. MySQL hat die eigene Funktion mysql_(real_)escape_string(). Die sollte
auch benutzt werden. Dafür muss aber vorher der Basisschutz wieder entfernt werden --> stripslashes().
Wert wenn man die Daten später wieder ausgibt, muiss man entscheiden, welche Codierung gewählt werden soll.
Bei Ausgabe in einer Textarea reicht htmlentities(wert)
Bei Ausgabe in einem einfachen HTML-Bereich benutzt Du besser nl2br(htmlentities(wert))
Dabei gehen dann Leerzeichen inn der Ansicht verloren.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
ein Beispiel findest Du unter http://selfhtml.bitworks.de/speichern.php
Harzliche Grüße aus http://www.annerschbarrich.de
Tom