hotti: mysql_real_escape_string

hi,

die Funktion s. Thema verhält sich wohl unterschiedlich. Wenn ich auf

meinem Chat ein einfaches Hochkomma eingebe, erscheint in der Ausgabe ein Backslash davor '

Auf dem Server zuhause macht das Script das nicht. Wo ist denn da der Unterschied zu finden, phpinfo(irgendwo)?

Horsti

--
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  1. Hello Hotterich,

    die Funktion s. Thema verhält sich wohl unterschiedlich. Wenn ich auf

    meinem Chat ein einfaches Hochkomma eingebe, erscheint in der Ausgabe ein Backslash davor '

    Auf dem Server zuhause macht das Script das nicht. Wo ist denn da der Unterschied zu finden, phpinfo(irgendwo)?

    Der Unterschied ist bei bei der Konfigurationseinstellung

    magic_quotes_gpc

    zu suchen.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. hi,

      Der Unterschied ist bei bei der Konfigurationseinstellung

      magic_quotes_gpc

      zu suchen.

      Und gefunden ;-)

      Aber das ist nicht das was ich suchte eigentlich. Ich suche einen Ersatz für:

      $dbh->quote($str); # Perl

      Problem
      INSERT VALUES('$str'); # Alle ' gehen flöten, " bleibt
      INSERT VALUES("$str"); # Alle " gehen flöten, ' bleibt

      in Perl s.o., INSERT VALUES($str); und alles wird gut. Die Frage ist, wie ich das mit PHP hinbekomme (meinen Provider will ich deswegen nicht anrufen).

      Horsti

      1. $dbh->quote($str); # Perl
        Problem
        INSERT VALUES('$str'); # Alle ' gehen flöten, " bleibt
        INSERT VALUES("$str"); # Alle " gehen flöten, ' bleibt
        in Perl s.o., INSERT VALUES($str); und alles wird gut.

        Prepared statements gibt es hoffentlich auch in PHP?

        1. Prepared statements gibt es hoffentlich auch in PHP?

          Diese Hoffnung stirbt zuletzt ;-)

          Bis dann,
          mein Gott Walther

          1. Prepared statements gibt es hoffentlich auch in PHP?

            Diese Hoffnung stirbt zuletzt ;-)

            done :(

            1. Tach.

              Prepared statements gibt es hoffentlich auch in PHP?

              Diese Hoffnung stirbt zuletzt ;-)

              done :(

              Wieso? Schau Dir mysqli an.

              --
              Wenn es schwingt, ist es ein Filter – Oszillatoren würden so etwas nie tun.
              1. Tach.

                Prepared statements gibt es hoffentlich auch in PHP?

                Diese Hoffnung stirbt zuletzt ;-)

                done :(

                Wieso? Schau Dir mysqli an.

                Wieso? Prepared Selects sind nicht das Problem, das geht schon in meinem Script. Aber die Quoterei mit dem falschen Schräger vornedran ist da immer noch und so landets auch in der Tabelle auf dem Server.

                Ich hab übrigens noch einige Fallstricke in PHP gefunden [1], also für einen Anfänger ist PHP nix, auf gar keinen Fall. Perl ist da wesentlich durchschaubarer.

                [1] und hingekriegt ;-)

                Vieße Grüle,
                Rolf

                --
                Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
                1. Hallo

                  Prepared statements gibt es hoffentlich auch in PHP?

                  Diese Hoffnung stirbt zuletzt ;-)

                  done :(

                  Wieso? Schau Dir mysqli an.

                  Wieso? Prepared Selects sind nicht das Problem, das geht schon in meinem Script. Aber die Quoterei mit dem falschen Schräger vornedran ist da immer noch und so landets auch in der Tabelle auf dem Server.

                  Liest du auch, was dir geschrieben wird[1]? Hier war mehrfach (mitsamt Verlinkung) von Magic Quotes und der Lösung dieses Problems die Rede. Nochmal: Das hat NullKommaNix mit mysql_real_escape_string zu tun und wenn du denen, die hier schon gestern Nachmittag geantwortet haben, zugehört hättest, wüsstest du das auch schon seit einigen Stunden. Als Perl-Jünger einfach mal PHP zu bashen ist natürlich einfacher.

                  [1] Komisch, diese Frage jemandem stellen zu müssen, der als Stammposter durchgeht.

                  Tschö, Auge

                  --
                  Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
                  Terry Pratchett, "Wachen! Wachen!"
                  Veranstaltungsdatenbank Vdb 0.3
      2. Hi!

        Die Frage ist, wie ich das mit PHP hinbekomme (meinen Provider will ich deswegen nicht anrufen).

        Magic Quotes sind ein depracated Feature, unter anderem deshalb, weil sie an der falschen Stelle arbeiten und damit in einer erheblichen Zahl Anwendungafälle mehr stören als nutzen. Wenn dein Provider sie dir nicht wegkonfigurieren mag, und du es nicht selbst durch eine entsprechende Konfiguration kannst/darfst, dann lies im Handbuchkapitel zu den Magic Quotes, wie man sie im Script wegbekommt.

        Lo!

        1. dann lies im Handbuchkapitel zu den Magic Quotes, wie man sie im Script wegbekommt.

          Hättest du auch gleich verlinken können.

          1. Hi!

            dann lies im Handbuchkapitel zu den Magic Quotes, wie man sie im Script wegbekommt.
            Hättest du auch gleich verlinken können.

            Ich hatte doch schon das Kapitel verlinkt. Und wenn dann Disabling ....

            Lo!

    2. Hello Hotterich,

      moinmoin;

      Der Unterschied ist bei bei der Konfigurationseinstellung

      magic_quotes_gpc
      zu suchen.

      Böhse Falle. Aber PHP steckt ja noch in der Entwicklungsphase, da drücke ich maln Auge zu. In mehr als 10 Jahren hab ich ungezählte CGI-Scripts in Perl geschrieben, habe den Wechsel von Perl-v3 zu -v4, -v5 und höher erleben dürfen aber eines war immer gegeben: Die Portierbarkeit von Perl-scripts auf unterschiedliche Plattformen wobei mit den Standardfunktionen/Modulen jedes Script auf verschiedenen Plattformen/Umgebungen gleichermaßen funktioniert ohne dass das Verhalten einer Funktion von irgendwelchen Konfigurationseinstellungen abhängig ist.

      Und die Vermischung von HTML mit Script ist sowieso ein Unding und führt zu schlechten Prgrammiergestühle wie z.B. sowas hier

      <?php }else{ ?>

      <p>...weiter im Text...</p>

      was ich weiter unten als Empfehlung gelesen habe. Das ist SpaghettiCode in Reinkultur ;-)

      Vieße Grüle,
      Horst Nudelholz

      --
      Trost gibt Dir in allen Dingen: Ritter Götz von Berlichingen.
       
      1. Hi!

        Umsteiger machen gern den Fehler und vergleichen zu viel von dem was sie kennen mit dem neuen System.

        Böhse Falle. Aber PHP steckt ja noch in der Entwicklungsphase, da drücke ich maln Auge zu. In mehr als 10 Jahren hab ich ungezählte CGI-Scripts in Perl geschrieben, habe den Wechsel von Perl-v3 zu -v4, -v5 und höher erleben dürfen aber eines war immer gegeben: Die Portierbarkeit von Perl-scripts auf unterschiedliche Plattformen wobei mit den Standardfunktionen/Modulen jedes Script auf verschiedenen Plattformen/Umgebungen gleichermaßen funktioniert ohne dass das Verhalten einer Funktion von irgendwelchen Konfigurationseinstellungen abhängig ist.

        Du hast es anscheinend immer noch nicht verstanden. Es ist kein Verhalten einer Funktion (mysql_real_escape_string) sondern ein Feature, das vor dem Scriptstart zuschlägt. Wegen seiner Nebenwirkungen und Fehlplatzierung ist es ja auch auf der Abschussliste. Allerdings tut es seine Funktion bei Anfängern, die noch nicht für SQL-Injection-Probleme sensibilisiert sind und in einfach(st)en Scripten.

        PHP hat nun mal eine Vergangenheit, in der einiges schief gelaufen ist. Damit musst jeder leben, da hilft kein Jammern und das Glorifizieren anderer Systeme. Einige der größten Fehler sind ja für Version 6 geplant eliminiert. Gerade die Kompatibilität für ältere Scripte hat dafür gesorgt, dass sie der Prozess so lange hinzieht[*]. Dein Problem ist nun, dass dein Provider diese Kompatibilität zu wahren pflegt, obwohl die Standardeinstellung schon seit Jahren eine andere ist, und dass auf deinem Testsystem bereits die neue Konfigurationsempfehlung eingestellt ist.

        [*] An der Dauer ist auch schuld, dass PHP 6 Zeit braucht um "sich zu entwickeln".

        Und die Vermischung von HTML mit Script ist sowieso ein Unding und führt zu schlechten Prgrammiergestühle wie z.B. sowas hier

        Wie hältst du es, ohne HTML mit anderem Code zu vermischen? Und jetzt komm mir nicht mit Platzhaltern, denn die sind auch nichts anderes als Code.

        Lo!

        1. Hello,

          Du hast es anscheinend immer noch nicht verstanden. Es ist kein Verhalten einer Funktion (mysql_real_escape_string) sondern ein Feature, das vor dem Scriptstart zuschlägt. Wegen seiner Nebenwirkungen und Fehlplatzierung ist es ja auch auf der Abschussliste. Allerdings tut es seine Funktion bei Anfängern, die noch nicht für SQL-Injection-Probleme sensibilisiert sind und in einfach(st)en Scripten.

          Es hilft nicht nur gegen SQL-Injection ein bisschen, sondern auch ein bisschen gegen Mail-Header-Injection und ein bisschen gegen XXS-Angriffe und ein bisschen gegen ...

          Also immer nur ein bisschen.

          Das ist das Problem! Es bleiben immer Lücken und die Stringbehandlung passt auch nie wirklich genau zur Aufgabe. Aber das weißt Du ja :-)

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
        2. hi,

          Wie hältst du es, ohne HTML mit anderem Code zu vermischen? Und jetzt komm mir nicht mit Platzhaltern, denn die sind auch nichts anderes als Code.

          Nein, keine Platzhalter. Meine CGI-Scipts haben immer zwei Teile:
          1- Kontrollstruktur für Parameter
          2- Funktionsteil

          Wobei ich die Funktionen, die HTML ausgeben, meistens am Ende zu stehen habe. Genauso werde ich das auch mit PHP machen, das geht auch ohne ScriptCode inmitten von HTML oder gar "aufgetrennten" Schleifen/Konrollstrukturen.

          Viele Grüße,
          Horst Platzhalter

          1. Hi!

            Meine CGI-Scipts haben immer zwei Teile:
            1- Kontrollstruktur für Parameter
            2- Funktionsteil

            Wobei ich die Funktionen, die HTML ausgeben, meistens am Ende zu stehen habe. Genauso werde ich das auch mit PHP machen, das geht auch ohne ScriptCode inmitten von HTML oder gar "aufgetrennten" Schleifen/Konrollstrukturen.

            Das heißt dann konkret, dass du es genau umgekehrt machst, der Perl-Manie folgst, weil es dort nicht anders geht, und Heredoc-Blöcke in Code einfügst? Das ist auch nicht besser, eher im Gegenteil. Warum muss sich PHP im Codeteil mit statischem Text rumschlagen, den es doch nur ausgibt, ohne was damit gemacht zu haben (von beispielsweise statischem Text ausgehend, der bedingt ausgegeben werden soll).

            [...] "aufgetrennten" Schleifen/Konrollstrukturen.

            Ob vor und nach der Anweisung <?php und ?> zu finden ist, oder der Text mit echo + Quoting + Escapezeichen oder Heredoc eingefasst ist, nimmt sich letztlich nicht viel.

            Lo!

  2. Hi!

    die Funktion s. Thema verhält sich wohl unterschiedlich. Wenn ich auf

    Nein, es ist nicht diese Funktion sondern das Feature Magic Quotes (das oft genug hier behandelt wurde, weswegen ich dir nur den Namen zum Suchen sage). Kontrollausgaben an passenden Stellen hätten dir gezeigt, dass die genannte Funktion unschuldig ist.

    Lo!