mysql_real_escape_string

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

  • mysql_real_escape_string

    Hallo alle zusammen,

    ich habe folgendes proglem und zwar möchte ich es verhindern dass sql-injection bei meinen scripten möglich ist.

    habe eine form in der ich eben z.b. den namen einer firma in einem textfeld eingeben kann.
    dieser wert wirt dann per "post" übergeben und ich nehme die post variable und möchte die sonderzeichen eben per mysql_real_escape_string($_POST['firma']
    in die variable "$firma" schreiben und diese dann in der db speichern.

    soweit so gut.

    allerdings habe ich das problem dass wenn ich nun den wert ausgebe bevor er in die db geschrieben wird dann bekomme ich als ausgabe \\\"Mustermann\\\"
    schreibe ich die variable in die datenbank steht in der db \"Mustermann\" drin.

    ich kann mir das ganz überhaupt nicht erklären.es sollte ja eigentlich nur ganz normal der der Name Mustermann in die db geschrieben werden oder?

    könnt ihr mir bitte vielleicht helfen?
    shit happens

  • #2
    Du sollst mysql_real_escape_string() nur dann verwenden, wenn du Werte in die Datenbank schreibst.

    Falsch:
    PHP-Code:
    // Datenbankabfrage
    $result mysql_query("SELECT * FROM tabelle WHERE firma = '" mysql_real_escape_string($_POST['firma'])  . "'");

    // HTML-Ausgabe
    echo "Gesuchte Firma: " mysql_real_escape_string($_POST['firma']); 
    Richtig:
    PHP-Code:
    // Datenbankabfrage
    $result mysql_query("SELECT * FROM tabelle WHERE firma = '" mysql_real_escape_string($_POST['firma'])  . "'");

    // HTML-Ausgabe
    echo "Gesuchte Firma: " htmlspecialchars($_POST['firma']); 
    Zuletzt geändert von h3ll; 03.12.2009, 20:14.

    Kommentar


    • #3
      Danke @h3ll scohn mal für die Info.

      Genau das habe ich vor, ich will die per POST übergebenen Werte in die Datenbank schreiben.

      Mein String für die DB sieht so aus:

      PHP-Code:
      $dateneintragen  "Insert Into kunde (anrede,firma,nachname,vorname,strasse,plz,ort,wbeginn,wende,aktiv,gs,notiz) 
      values('"
      .mysql_real_escape_string($anrede)."', '".mysql_real_escape_string($firma)."', 
      '"
      .mysql_real_escape_string($nname)."','".mysql_real_escape_string($vname)."',
       '"
      .mysql_real_escape_string($strasse)."', '".mysql_real_escape_string($plz)."',
       '"
      .mysql_real_escape_string($ort)."', '".mysql_real_escape_string($wbeginn)."',
       '"
      .mysql_real_escape_string($wende)."',
       '"
      .mysql_real_escape_string($aktiv)."','".mysql_real_escape_string($gs)."',
       '"
      .mysql_real_escape_string($notiz)."') "
      Leider bekomme ich hier wie beschrieben das Problem dass wenn in der Variable $Firma der Wert 'Firma' steht dass dort dann in die Datebank der Wert \'Firma\' geschrieben wird.

      Kapiere ich hier was nicht oder mache ich was falsch?
      Zuletzt geändert von Magic11; 03.12.2009, 20:29.
      shit happens

      Kommentar


      • #4
        Ich denke auch, dass es an magic_quotes liegt.

        @h3ll: So oft geändert und dann war die erste Idee doch richtig?
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          @AmicaNoctis: den eintrag von h3ll hab ich zuerst eh auch noch gelesen gehabt mit den magic_quotes ;-)


          d.h. ich soll die magic_quotes auf "off" stellen und dann funktioniert mein code wie es sein soll???
          shit happens

          Kommentar


          • #6
            Zitat von Magic11 Beitrag anzeigen
            d.h. ich soll die magic_quotes auf "off" stellen und dann funktioniert mein code wie es sein soll???
            Ja, ob's dann funktioniert sehen wir ja dann. Vergiss nicht, den Apache neu zu starten, wenn du es in der php.ini änderst (empfohlen).

            Wenn du es nur zur Laufzeit änderst, musst du das in jedem Skript tun, was zum Testen ob es daran liegt ja aber erstmal ausreichen würde.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              also ich muss echt sagen "RESPEKT" !!

              das problem lag wirklich an den magic_quotes wobei ich
              natürlich zugeben muss dass ich da wohl nie wirklich darauf gekommen
              wäre.

              ich sag danke für eure hilfe.

              Hab die magic_quotes auf off gestellt und schon gings nachdem der apache
              neu gestartet wurde.

              danke nochmal.
              shit happens

              Kommentar

              Lädt...
              X