Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatisches escapen verhindern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Automatisches escapen verhindern

    Moin

    Ich schreibe gerade ein CMS und bin jetzt grade bei den BBCodes und probiere deshalb ziemlich viel mit den Texten rum.

    Mir ist jetzt aber ein Problem aufgekommen, dass ich nciht genau verstehe und das ich mir auch nciht ganz erklären kann.

    Ich habs hier in Anfänger gepostet, da es wahrscheinlcih ganz simpel ist, ich im Moment (und mit der Suche) nicht drauf komme:

    Also wenn ich in meinem Text irgendwo Anführungszeichen ( " oder ' ) habe und den Text abschicke und in die DB eintrage, dann geht das auch komplett richtig, und der Text wird 1 zu 1 ausgegeben. Kein Problem soweit.

    Nun hab cih mir aber auch eine Vorschau funktion gebaut und da wird der Text statt gespeichert werden zu ausgegeben.
    Das Problem ist jetzt aber, dass wohl durch das echo(print() macht das selbe) alle Anführungszeichen mit einem \ escapet werden.

    So, nun die Frage:

    Ist das zwingend nötig? Eigentlich weiß PHP doch acuh so, wann der String zu ende ist und ich habe nicht vor, diesen irgendwie an eval() oder ähnliches zu übergeben.
    Wie kann ich das stillvoll unterbinden? Ich halte es nicht für schön da nochmal jedes \" durch " zu ersetzen. Das muss doch einfacher gehen, oder irre ich mich? (Wobei .... sobald ich dann den ent-escapedten Text ausgebe, dann wird der doch wieder escaped, oder?)

    Wie ihr merkt bin cih etwas verwirrt. Ich hoffe ihr habt ne Idee.

    Danke

    Andun


  • #2
    Diese zusätzlichen Backslashes werden vermutlich durch magic_quotes_gpc und / oder magic_quotes_runtime. Um die Backslashes zu entfernen, kannst du entweder diese Option deaktivieren oder stripslashes() verwenden.

    Kommentar


    • #3
      aaahhh

      ok.

      Danke.

      Dachte mir ja schon, dass es da so ein Sicherheitsding war, nur finden konnte ich es nicht.

      stripslashes() ist auch genau das was ich suche. Danke.

      Andun

      Kommentar


      • #4
        Hi Andun.

        Damit du dir kein Sicherheitsloch aufreißt:

        Die PH-Option magic_quotes_gpc sorgt dafür, dass alle eingehenden Vars entschärft werden. Das ist extrem nervig, beruht aber auf dem Konzept von PHP eines leichten Einstiegs. Wenn du externe Variablen unescaped in deine Datenbank-Abfrage setzt, werden z.B. die Hochkommata als Steuerzeichen innerhalb der Query angesehen und ein Angreifer kann so deine Anfragen umbiegen.

        Ein (in meinen Augen) sinnvolles Vorgehn ist, am Anfang deines Skriptes den Wert der magic-quotes-Option zu überprügen[1] und ggf. dieses automatische Escaping rückgängig zu machen (in den Kommentaren in der Doku findest du Anregungen dazu). Wichtig ist jetzt aber, dass du die Werte wieder entschärfst, bevor du sie in eine Datenbank-Query setzt. mysql_real_escape_string() ist z.B. im Zusammenhang mit MySQL die Funktion dazu.

        [1] http://php.net/manual/en/function.ge...quotes-gpc.php

        Hierfür ist es eine feine Sache, sich eine SQL-Klasse anzulegen, die eine Methode enthält, der du eine Query mit Platzhalten und die einzusetzenden Werte übergibst. Die kannst du mt vsprintf() zusammenschrauben, wobei du vorer eben alle Werte (die Strings sind) durch mysql_real_escape_string() schickst.

        Basti

        Kommentar

        Lädt...
        X