• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Sicherheit bei Post-Funktion

Hallo-Welt

Aktives Mitglied
Hallo allerseits,

Ich habe jetzt mein Kommentar-Script so gut wie fertig, und da frage ich mich natürlich, was ich machen kann, um Missbrauch zu verhindern. Denn aktuell könnte einfach JavaScript-Code oder PHP-Code durchgeschmuggelt werden, und dabei großen Schaden anrichten. Zudem könnte das gesammte Layout durch HTML-Text zerstört werden.

Um dies zu verhindern hab ich mir augedacht, dass wenn ich die Zeichen "<" und ">" verhindern würde, zumindest mal kein HTML- oder JavaScript-Code mehr durchkommen würde. Ist das richtig?

Umsetzen würde ich das ganze dann irgendwie so:
PHP:
$forbidden1 = strpos($_POST['mein_post'], '<');
$forbidden2 = strpos($_POST['mein_post'], '>');
if ($forbidden1 === true) {
       echo 'Fehler';
} elseif ($forbidden2 === true) {
       echo 'Fehler';
} else {
       echo 'Ist sauber!';
}
Jetzt frage ich euch folgendes:
  1. Würde das so funktionnieren?
  2. Gäbe es villeicht eine bessere Methode, um mein Vorhaben umzusetzen?
  3. Und wie kann ich verhindern, dass PHP-Code gepostet wird, bzw. hat das überhaupt Auswirkungen auf das Script und könnte so ein Hackerangriff stattfinden?
Ich danke schon mal für alle Antworten.
 
Also, wenn ich die Funtkion htmlentities folgendermaßen nutzen würde
PHP:
htmlentities ($_POST['mein_post']);
, würden dann die Zeichen ">" und "<" weiterhin unterstützt werden, und nur im ASCII-HTML-Format gepostet werden, ist das richtig? Wenn ja, würden diese Zeichen denn von garantiert keinem Browser als richtigen HTML-Code interpretiert werden?
 
Probiere es doch einfach mal aus und sieh' dir dann den entstandenen HTML-Code an
 
Also was, der bei mir zu machen scheint, ist gar nichts. Das hier ist mein Testscript:
PHP:
$myecho = htmlentities ('<p>This is a test</p>');
echo $myecho;
Und das hier ist mein Output:
Code:
<p>This is a test</p>
Da stimmt doch was nicht.

Edit: ich bin ein Idiot: Mein Browser hat den Text natürlich schon als html interpretiert. Der richtige Output im Quelltext ist:
Code:
&lt;p&gt;This is a test&lt;/p&gt;
Das heißt, es hat funktioniert.
 
@bdt600:
Was glaubst du denn, was aus <?php wird?
Ja schon, aber "<?php" muss ja gar nicht geschrieben werden, wenn der "<?php" schon offen ist!!! Das heißt im Klartext, dass dennoch der Code ausgeführt werden kann. Denn man könnte dann ja sofort, z.B. eine If-else-Abfrage machen, ohne "<" und ">" verwenden zu müssen.

@threadi:
Indem Du die Eingabe nicht vom PHP-Parser ausführen lässt.
Und wie kann ich das verhindern, dass der Code ausgeführt wird, bzw., wie kann ich das umstellen?
 
Wen du die Eingabe nicht gerade durch eval jagst oder die Eingabe nicht als PHP-Datei speicherst, kann da nix passieren.
 
Wen du die Eingabe nicht gerade durch eval jagst oder die Eingabe nicht als PHP speicherst, kann da nix passieren.
Hmm... das ganze wir in einer separaten Textdatei abgespeichert, die dann durch include in PHP eingefügt wird. Wird dieser Code nicht ausgeführt?
 
Aha. Das heißt, ich sollte kein include machen, sondern die Datei öffnen, diese durch den htmlentities-Filter gehen lassen um sie dann mit echo einzubinden. Das ist eine wirklich kluge Idee. Vielen Dank dafür. :)
 
Obwohl ich da lieber eine Datenbank nehmen würde, anstatt jeder Menge Dateien
 
Na, das geht schon. Die liegen alle in einem separaten Ordner. Und mich juckt es nicht, ob da jetzt 1 Datei liegt, oder 2'000. Das wird so schon gehen. :cool:
 
Nichts hindert mich daran. bplaced unterstützt eine Datenbank, daran liegt es nicht. Jedoch hab ich mich noch nie mir mysql und co auseinandergesetzt, und hab daher versucht, mein Vorhaben mit reinem PHP umzusetzen, und das hat soweit auch ganz gut funktioniert.
 
Als ich vor einigen Jahren mit PHP angefangen habe, habe ich auch viel dateibasierend gemacht, weil ich mich nicht so wirklich mit Datenbanken beschäftigt habe. Irgendwann kam dann aber der Zeitpunkt, wo es immer unübersichtlicher wurde und ich dann doch mit MySQL angefangen habe. Und siehe da, garnicht so schwer, wie ich befürchtet hatte und heute wären dateibasierende Daten für mich eine Katastrophe. Trau dich einfach mal dran, dann wirst du die gleichen Erfahrungen machen.
 
Naja, villeicht mal an einem verregneten Sonntagnachmittag...
Es kann gut sein, dass ich, wenn ich eine Datenbank erst mal nutze, nicht mehr auf sie verzichten will. Aber eigentlich, sehe ich noch halbwegs durch meinen Quelltext durch, so dass ich das auf später vertage.
Dann kann ich später immerhin immer noch sagen, hätte ich doch bloß schon früher damit angefangen. :D
 
Zurück
Oben