PHP - Eingabetext sicher in Variable speichern

Psychodelics hat gesagt.:
So wie ich das jetzt verstanden habe, ich es nicht schlimm, wenn ich den Befehl stripslashes auf ein Textfeld anwende.

Dann werde ich es so machen, weil es so funktioniert. Danke nochmal.

Gruß, Adnan

Mache es nicht pauschal, sondern prüfe vorher, ob magic_quotes_gpc wirklich ON ist.

Ab PHP6 existiert diese Einstellung nicht mehr, dein stripslashes() würde dann statt der jetzt automatisch erzeugten Backslashes zum escapen spezieller Zeichen vom Nutzer eingegebene Backslashes entfernen.
 
Also, "magic_quotes_gpc" ist definitiv ON. Bin ich jetzt sicher?!

Ich hab zum Beispiel mal folgende Websites ins Netz gestellt:

http://AlphAgemO.de
dann auf Projects, 1. Beitrag.

Also wie gesagt, magic_quotes_gpc ist aktiviert. Bedeutet das, dass hier also niemand richtigen Unfug machen kann?

Was sagt ihr? Seite löschen oder ist es ungefährlich!?

P.S.: Erlaube nämlich zur Sicherheit nur 20 Zeichen, aber das kann man ja auch irgendwie umgehen.

Danke!!


EDIT: Und noch eine Frage, kann ich es irgendwie einstellen, dass der komplette Text mit stripslashes() eingelesen wird. Weil das n sehr großes Formular ist und es ja nicht verkehrt wäre, wäre es für jedes Feld erlaubt.
 
Zuletzt bearbeitet:
Was sagt ihr? Seite löschen oder ist es ungefährlich!?
Wenn du keine sensiblen Daten hast, für wen sollte es dann gefährlich sein?
Generell rate ich aber auch von magic_quotes_gpc ab (deaktiveren!). Man sollte die Nutzereingaben von Hand überprüfen (mysql_real_escape_string() und htmlspecialentities), dann braucht man auch nicht mit stripslashes hantieren.

P.S.: Erlaube nämlich zur Sicherheit nur 20 Zeichen, aber das kann man ja auch irgendwie umgehen.
Du musst die 20 Zeichen auf dem Server prüfen. Das HTML Formular kann sich jeder Client umbauen wie er will.

An dieser Stelle möchte ich zwei Arten des Web Hackings vorstellen, die meiner Meinung nach mittlerweile keine große Bedrohung mehr im Internet darstellen dürften, um allen mal einen Einblick in das Thema zu geben.
Bitte informiert dich vorher, du scheinst in der Hinsicht eine etwas eingeschränkten Horizont zu haben (nicht böse gemeint, aber du hast keine Ahnung wie komplex die beiden Themen sind und vor allem wie aktuell und bedeutungsvoll.)
 
Ok danke CPoly,

ich werde es vorrübergehend mit stripslashes lassen, weil es seine Funktion erfüllt.

Ich habe den genannten Text von der Website gelöscht und dank dir auch dafür.

Ich muss mir mal eine allgemeingültige Variante raussuchen, mit der Texte unverändert bleiben und zu gleich komplett ungefährlich sind. Dann könnte ich das immer wieder verwenden. Aktuell weiß ich auch gar nicht, wie ich dieses magic_quotes deaktiviere.

Also, wenn da jemand eine gute und sichere Variante kennt (wie macht es zum Beispiel google in dem suchfeld oder Gästebücher usw), wäre ich echt dankbar, ansonsten bin ich soweit erst mal zufrieden. Hab gelernt, was es mit diesem Magic_quotes auf sich hat und das ich die stripslashes extrem überwertet und das ganze Thema unterbewertet habe.

Danke
 
Ich muss mir mal eine allgemeingültige Variante raussuchen, mit der Texte unverändert bleiben und zu gleich komplett ungefährlich sind. Dann könnte ich das immer wieder verwenden.

Wenn du Daten in deine MySql Datenbank einträgst, umschließe die originalen, unveränderten Nutzerdaten mit mysql_real_escape_string. Danach hast du die Nutzereingabe exakt so in der Datenbank stehen, wie sie eingegeben wurden, nur das beim Eintragen keine Injection möglich war.

Wenn du Daten per echo oder irgendwie anders auf der Webseite ausgibst, wo sie vom Browser interpretiert werden können(was zum Beispiel beim ausgeben in einer TextArea nicht der Fall wäre), umschließe Sie vor dem ausgeben mit htmlspecialchars(), damit der Browser die Zeichen nur als Zeichen ausgibt und nichts sonst.

Aktuell weiß ich auch gar nicht, wie ich dieses magic_quotes deaktiviere.
Das musst du in der Konfigurationsdatei deines Apache-Servers tun.
http://www.php.net/manual/en/security.magicquotes.disabling.php
Auf jedenfall Example #1 benutzen.
 
ich werde es vorrübergehend mit stripslashes lassen, weil es seine Funktion erfüllt.

Aktuell weiß ich auch gar nicht, wie ich dieses magic_quotes deaktiviere.

Das ist der Knackpunkt, wenn du keinen Zugriff auf die PHP-Konfiguration hast, kannst du magic_quotes_gpc nicht einfach ändern.

Es kann aber gut sein, dass es jemand anders ändert, oder bspw. ein Webhoster auf PHP6 updatet.

Was das für Auswirkungen haben kann(mal von der Datenbanksicherheit abgesehen)...hier ein vorstellbares Szenario:

Du hast einen login-geschützten Bereich.
Der User hat dort ein Passwort gewählt, welches ein Zeichen enthält, welches bei magic_quotes_gpc escaped wird.

Also : magic_quotes_gpc ist On, der User loggt sich normal ein.

Dein Hoster updatet nun auf PHP6
magic_quotes_gpc existert nicht mehr, das Passwort wird bei der Eingabe nicht mehr "manipuliert". Ergebnis: Der User kann sich nicht mehr einloggen :eek:

Also:
Daten von aussen in jedem Fall vor jeder weiteren Verarbeitung per stripslashes in die tatsächliche Eingabe überführen, und zwar nach folgendem Schema:

Code:
$echteeingabe=(get_magic_quotes_gpc())
                ? stripslashes($_REQUEST['variable'])
                : $_REQUEST['variable'];

...es sei dann, man hat volle Kontrolle über die Konfiguration der Server, auf denen die Anwendung laufen wird/soll und kann sicherstellen, dass dort magic_quotes_gpc immer Off sein wird.

Alles andere, was die Sicherheit betrifft, kommt erst danach, denn es kommt darauf an, was du mit dem String machst.

Speicherst du ihn in einer DB, dann behandle ihn bspw. mit mysql_real_escape_string()
Gibst du den String aus, behandle ihn bspw. mit htmlentities() oder strip_tags() , um zu verhindern, dass dort HTML-Code eingeschleust wird.
 
Echt, danke euch beiden.

Jetzt funktioniert es einwandfrei. Ich könnte die magic_quotes per .htaccess deaktivieren.

Aktuelle vorgehensweise bei meinem Textefld:

name = "eingabe" value = "<?php echo htmlspecialchars(stripslashes("$eingabe"))?>"

So funktioniert es super. Ist das OK? Muss ich jetzt noch unbedingt die magic_quotes deaktivieren? So gesehen stören die mich nicht.

Gruß, Adnan
 
Hast du den Post von Sven wirklich gelesen? Er hat dort doch schon beschrieben, was es für Auswirkungen haben kann, wenn man magic_quotes mehr oder weniger ignoriert.

Die einfachste Möglichkeit wäre wohl, wenn man, bei eingeschalteten magic_quotes, zu Beginn des Script auf die globalen Arrays ($_POST, $_GET, $_COOKIE) stripslashes() anwendet und bei Bedarf an gegebener Stelle im Skript wieder addslashes(). Oder eben umgekehrt. Zu Beginn bei dektivierten magic_quotes erst alles mit addslahes() versehen und bei Bedarf an gegebener Stelle im Skript mit stripslahes() wieder entfernen. So bist du bei einem Update seitens des Hosters mit einem kleinen Eingriff wieder alle Probleme los, ohne erst einige hundert Zeilen Code anpassen zu müssen.

Ansonsten ist dein Ansatz korrekt.
 
Zuletzt bearbeitet:
Ich denke langsam verstehe ich das auch mit den magic_quotes und stripslashes.

Eine Frage hätt ich da noch:

Reicht es, wenn ich jedes Feld mit <hr/> teste Und wenn keine Trennlinie kommt ist alles super!? MySQL benutzt ich für das Formular nicht.

Aktuell klappt auch alles und javascript Befehle werden auch nicht ausgeführt und die Texte werden dem User so angezeigt, wie ers ie geschrieben hat :-)
Wenn jetzt alles sicher ist, dann bin ich fertig.

Also, reicht eine Überprüfung aller Felder mit <hr/> und einem javascript-Befehl?

Gruß, Adnan
 
Zuletzt bearbeitet:
Zurück