Jo: Anführungszeichen in Datenbank

Hallo,
ich möchte via PHP Textfelder in einer Datenbank eintragen die auch  einfache und doppelte Anführungszeichen beinhalten.
Leider wird der String ab diesen Sonderzeichen immer unterbrochen wenn ich sie via POST-Variable an das SQL-Statement übergebe.
Welche Funktion muss ich nutzen um das zu bewerkstelligen. Zieldatenbank ist PostgreSQL.
Danke
Jo

  1. Moin!

    ich möchte via PHP Textfelder in einer Datenbank eintragen die auch  einfache und doppelte Anführungszeichen beinhalten.
    Leider wird der String ab diesen Sonderzeichen immer unterbrochen wenn ich sie via POST-Variable an das SQL-Statement übergebe.
    Welche Funktion muss ich nutzen um das zu bewerkstelligen. Zieldatenbank ist PostgreSQL.

    Hängt davon ab, welche Zugriffsmethode du derzeit benutzt, aber unabhängig davon lautet dein Suchwort "escape" - und das muß man zwingend bei jeder Operation durchführen, in der der Kontext wechselt, so wie bei dir von "String mit einfachem Text" hin zu "String innerhalb eines PostgreSQL-Querys".

    Ebenso gilt dies beim Wechsel von "String mit einfachem Text" hin zu "String innerhalb von HTML" - falls du vermeiden willst, dass deine Website für Cross-Site-Scripting anfällig wird.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Moin!

      ich möchte via PHP Textfelder in einer Datenbank eintragen die auch  einfache und doppelte Anführungszeichen beinhalten.
      Leider wird der String ab diesen Sonderzeichen immer unterbrochen wenn ich sie via POST-Variable an das SQL-Statement übergebe.
      Welche Funktion muss ich nutzen um das zu bewerkstelligen. Zieldatenbank ist PostgreSQL.

      Hängt davon ab, welche Zugriffsmethode du derzeit benutzt, aber unabhängig davon lautet dein Suchwort "escape" - und das muß man zwingend bei jeder Operation durchführen, in der der Kontext wechselt, so wie bei dir von "String mit einfachem Text" hin zu "String innerhalb eines PostgreSQL-Querys".

      Ebenso gilt dies beim Wechsel von "String mit einfachem Text" hin zu "String innerhalb von HTML" - falls du vermeiden willst, dass deine Website für Cross-Site-Scripting anfällig wird.

      • Sven Rautenberg

      Hallo, Danke für die Info, hab mal probiert.
      Mit addslashes($str) wird jedes Anführungszeichen maskiert und ich kann das ganze in die Datenbank eintragen. Aber ich möchte die Zeichen nicht in der Datenbank haben, wie kann ich das bewerkstelligen? Cross-Site-Scripting ist kein wichtiges Thema, da die Anwendung nur im Intranet läuft, aber wäre natürlich gut wenns auch für ne Webseite sicher wäre.
      Jo

      1. Moin!

        Hallo, Danke für die Info, hab mal probiert.
        Mit addslashes($str)

        addslashes ist nicht für die Verwendung mit Postgresql vorgesehen, weil es vermutlich nicht alle zu escapenden Zeichen kennt.

        Wie greifst du auf Postgres zu? Was spricht dagegen, die Postgres-Seite in der PHP-Doku aufzurufen und mal nach "escape" zu suchen? Strg-F, "escape" eintippen, Fundstelle sichten, fertig.

        wird jedes Anführungszeichen maskiert und ich kann das ganze in die Datenbank eintragen. Aber ich möchte die Zeichen nicht in der Datenbank haben, wie kann ich das bewerkstelligen?

        Du hast noch keine große Erfahrung, was Escaping und Datenbanken angeht.

        Cross-Site-Scripting ist kein wichtiges Thema, da die Anwendung nur im Intranet läuft

        Gerade dort ist es wichtig, weil durch den Vertrauensbonus ein Innentäter ein viel weitreichenderes Schadpotential hat.

        Außerdem: Was ist das denn für eine Argumentation? "Die Website muß nicht sicher sein, die ist nur für intern." JEDE Website muß sicher sein, und es ist absolut unsinnig, diese obligatorischen Mechanismen immer extra wegzulassen - dann vergißt man es nämlich gerne dort, wo es zwingend notwendig wäre.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Moin,
          danke für die Antwort,

          Wie greifst du auf Postgres zu? Was spricht dagegen, die Postgres-Seite in der PHP-Doku aufzurufen und mal nach "escape" zu suchen? Strg-F, "escape" eintippen, Fundstelle sichten, fertig.

          ich mach das jetzt mit pg_escape_string() und alles funzt super.

          Gerade dort ist es wichtig, weil durch den Vertrauensbonus ein Innentäter ein viel weitreichenderes Schadpotential hat.

          Außerdem: Was ist das denn für eine Argumentation? "Die Website muß nicht sicher sein, die ist nur für intern." JEDE Website muß sicher sein, und es ist absolut unsinnig, diese obligatorischen Mechanismen immer extra wegzulassen - dann vergißt man es nämlich gerne dort, wo es zwingend notwendig wäre.

          Habe mir Deine Worte durch den Kopf gehen lassen, Du hast natürlich recht und ich gelobe Besserung und werde die Anwendung so sicher wie möglich machen ;-)
          Gruß
          Jo