heinetz: Slashes im Formular

Hallo Forum,

folgende (vereinfachte) Konstruktion:

form.php:
---------

<form method="post" action="savepost.php">  
 <input type="text" name="test" value="<?=$_SESSION['post']['test'];?>"  
<form>

savepost.php:
-------------

<?  
[code lang=php]if ($_POST) $_SESSION['post'] = $_POST;

?>
<a href="form.php">zurück zum Formular</a>[/code]

... macht gerade Ärger.

Und zwar bei Anführungszeichen. Dabei entsteht 'Wildwuchs'. Wie sorge
ich einfach und sicher dafür, dass ich ein " bzw. ' in das Eingabefeld
eingeben, dass Form dann abschicken, die Werte in der Session speichern
dort wieder rausholen und als value in das Eingebefeld schreiben und den
Vorgang endlos wiederholen, ohne dass in meinem Eingabefeld am Ende
///////////" steht oder garnichts dargestellt wird, weil das XHML nicht
mehr ok ist ? Und das ganze am besten unabhängig von "magic_quotes_gpc".

gibt's da nen universellen Lösungsansatz ?

danke für Tipps und

beste gruesse,
heinetz

  1. Hi,

    [...] Und das ganze am besten unabhängig von "magic_quotes_gpc".

    stelle auf PHP 6 um, da gibt's diesen gesamten magic-Quatsch komplett nicht mehr. Bis dahin wirst Du entweder magic_* deaktiviert als Voraussetzung vorgeben, oder aber in Deinem Code abfragen, wie die Werte gesetzt sind, und ggf. entsprechende Korrekturen vornehmen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Es ist eine schlechte Idee, diese Daten in der $_SESSION zu speichern. Verwende lieber einen Datenbankbasierten Ansatz.

    Gruß, LX

    --
    RFC 1925, Satz 6: Es ist einfacher, ein Problem zu verschieben (...), als es zu lösen.
  3. Hi,

    Und zwar bei Anführungszeichen. Dabei entsteht 'Wildwuchs'. [...]
    ///////////"

    Du meinst wohl Backslashes statt Slashes.

    Und das ganze am besten unabhängig von "magic_quotes_gpc".

    Da diese Option die jenige ist, die das Ganze im Zweifelsfall *bewirkt*, kannst du das Problem schlecht "unabhängig" von ihr angehen.

    Im Gegenteil, wenn du nicht voraussetzen willst, dass diese Option auf off zu stehen *hat*, damit dein Script vernünftig läuft - dann musst du deine Daten in *Abhängigkeit* von ihr behandeln.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
  4. Mahlzeit heinetz,

    anstatt dieser Von-hinten-durch-die-Brust-ins-Auge-Konstruktion

    form.php:

    <form method="post" action="savepost.php">

    savepost.php:

    <a href="form.php">zurück zum Formular</a>

      
    würde ich Dir raten, Dich zum Thema "Affenformular" zu informieren.  
      
      
    MfG,  
    EKKi  
    
    -- 
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    
  5. echo $begrüßung;

    Und das ganze am besten unabhängig von "magic_quotes_gpc".
    gibt's da nen universellen Lösungsansatz ?

    Ja klar. Es gibt ein ganzes Kapitel im PHP-Handbuch, das sich mit dem Sinn und Unsinn von Magic Quotes befasst. An dessen Ende findest du mehrere Möglichkeiten, sie los zu werden.

    echo "$verabschiedung $name";

  6. Hallo Forum,

    mich hätte ja mal interessiert in welchem Moment was dafür sorgt,
    dass die Anführungszeichen maskiert werden. Aber egal.

    In meinem Kontrukt werden die Daten nur zu erneuten Darstellung
    im selben Post-Formular in der Session zwischengespeichert. Der
    User fängt an das Formular auszufüllen, verlässt die Seite und
    kommt zurück. Das ganze geschieht ganz kontrolliert. D.h. es ist
    garnicht gewünscht, dass die Daten an anderer Stelle oder an der
    selben Stelle zu jedem Moment zur Verfügung stehen.

    Es geht eigentlich nur um eine Lösung für diesen konkrten Fall
    und ich habe es nun ganz einfach dadurch gelöst (wenn es mir
    nicht an anderer Stelle einen Strick dreht), dass die Daten aus
    Post mit htmlentities() maskiere, bevor ich sie in die Session
    schreibe.

    gruess,
    heinetz

    1. echo $begrüßung;

      mich hätte ja mal interessiert in welchem Moment was dafür sorgt, dass die Anführungszeichen maskiert werden. Aber egal.

      Wenn du die dir gegebenen Hinweise beachtetest und das Kapitel zu den Magic Quotes gelesen hättest, wüsstest du, dass dieses Feature dafür verantwortlich ist. Du hast hier wieder einen der Fälle, in dem Magic Quotes nur Scherereien bereiten. Aber egal.

      Es geht eigentlich nur um eine Lösung für diesen konkrten Fall und ich habe es nun ganz einfach dadurch gelöst (wenn es mir
      nicht an anderer Stelle einen Strick dreht), dass die Daten aus Post mit htmlentities() maskiere, bevor ich sie in die Session schreibe.

      Was Unfug ist. Zum einen bleibt die Magic-Quotes-Problematik, zum anderen ist es imemr sinnvoll, Werte beim Übergang in einen anderen Kontext diesem gemäß zu behandeln und nicht einfach irgendwann vorher. Eine Session ist kein HTML-Kontext.

      PHP missachtet dieses Prinzip mit seinen Feature Magic Quotes. Es behandelt Eingabewerte für den Kontext SQL-String, unabhängig davon ob die Werte je in diesen Kontext gebracht werden.

      Als Lösungsvorschlag: Schalte das Feature Magic Quotes aus oder mach seine Auswirkungen rückgängig. Für beides findest du Vorgehensweise im bereits verlinkten Handbuchkapitel. Und dann informiere dich über kontextgerechtes Behandeln von Werten. Das ist ein hier sehr oft vorkommendes Thema, weil es immer wieder unbeachtet gelassen wird. Das Resultat dieser Unachtsamkeit hört auf Namen wie SQL-Injection oder Cross-Site-Scripting und sie steht nicht zu Unrecht auf vordersten Plätzen in der Liste der Top-25-Programmierfehler.

      echo "$verabschiedung $name";

      1. ja doch! ... ich werde mich näher mit dem thema auseinandersetzen ...