fotzibaer: SQL Injection

Hallo zusasmmen,

habe mir heute mal ein bisschen Gedanken über Sicherheit von MS SQL gemacht....Ich benutze diese für eine Webseite mit ASP.NET.

Erschreckend, was man da so machen kann...

z.B. http://www.nextgenss.com/papers/advanced_sql_injection.pdf

Ich benutze aber hauptsächlich Stored Procedures und eindeutige Funktionen für INPUT, UPDATE der Datenbank (Update z.B. per XML Formlayer).

Hat noch jemand Tipps, um weitere SQL Injection Sicherheitslücken zu schliessen? Was kann man noch machen?

Gruss & Danke,
fotzibaer

  1. Hi,

    Hat noch jemand Tipps, um weitere SQL Injection Sicherheitslücken zu schliessen? Was kann man noch machen?

    nur Nichtprofis und andere Suender arbeiten unter 'MS SQL Server' nicht mit SPs und basteln ihre SQL-Statements lustig (und fehleranfaellig) im Code (ASP ;-) zusammen.

    Gruss,
    Lude

    1. Hallo Lude,

      nur Nichtprofis und andere Suender arbeiten unter 'MS SQL Server' nicht mit SPs

      Tu ich ja zum Glück...

      und basteln ihre SQL-Statements lustig (und fehleranfaellig) im Code (ASP ;-) zusammen.

      Gebe mir Mühe, Injections zu verhindern...;)

      Aber mal im Ernst: Kann es sein, dass viele das Problem gar nicht kennen bzw. total vernachlässigen?!?

      fotzibaer

      1. Hi,

        Aber mal im Ernst: Kann es sein, dass viele das Problem gar nicht kennen bzw. total vernachlässigen?!?

        eigentlich nicht. - Was aber interessant ist: Wie macht man's, wenn der SQL-Dialekt keine SPs unterstuetzt? Handarbeit?   :-(

        Gruss,
        Lude

        1. Moin!

          eigentlich nicht. - Was aber interessant ist: Wie macht man's, wenn der SQL-Dialekt keine SPs unterstuetzt? Handarbeit?   :-(

          Escaping. Das hilft 100%. Gute Datenbank-APIs stellen dafür Schnittstellen und/oder Methoden bereit.

          - Sven Rautenberg

          --
          "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
          (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
          1. Hallo!

            eigentlich nicht. - Was aber interessant ist: Wie macht man's, wenn der SQL-Dialekt keine SPs unterstuetzt? Handarbeit?   :-(

            Escaping. Das hilft 100%. Gute Datenbank-APIs stellen dafür Schnittstellen und/oder Methoden bereit.

            Bist Du Dir da sicher?
            mysql_real_escape_string() schützt folgende Zeichen:

            NUL (ASCII 0),
            \n', \r',
             \',  '',
             `"'

            http://www.mysql.com/doc/de/mysql_real_escape_string.html

            Was ist wenn ich sowas mache:

            $id = "1 OR > 0";
            $sql = "SELECT * FROM table WHERE id = ".mysql_real_escape_string($id);

            IMHO sollte man die Werte immer noch in ' setzen, also

            $sql = "SELECT * FROM table WHERE id = '".mysql_real_escape_string($id)."'";

            Grüße
            Andreas

        2. Tach,

          eigentlich nicht.

          Aber wie verhindere ich z.B. beim Einloggen folgendes:

          ' having 1=1 ---

          --> kriege Felder raus

          ' or tabelle.feld like 'a%' ---

          --> kann mal schauen unter wessen Usernamen mit a ich so reinkomme...

          Klar, kann hier ' escapen, aber das kann man auch umgehen oder? Mit meinen Funktionen fange ich hauptsächlich ; ab...

          fotzibaer

          1. Hi,

            Klar, kann hier ' escapen, aber das kann man auch umgehen oder? Mit meinen Funktionen fange ich hauptsächlich ; ab...

            'Sven Rautenberg' bezog sich vermutlich nicht auf ein komplexes Schluesselwoerter-Escaping, sondern eher auf das Escapen der Hochkommata bzw. Anfuehrungszeichen.

            Gruss,
            Lude

            1. Mahlzeit,

              Klar, kann hier ' escapen, aber das kann man auch umgehen oder? Mit meinen Funktionen fange ich hauptsächlich ; ab...

              'Sven Rautenberg' bezog sich vermutlich nicht auf ein komplexes Schluesselwoerter-Escaping, sondern eher auf das Escapen der Hochkommata bzw. Anfuehrungszeichen.

              Das sollte sich auch auf Hochkommata beziehen...;)

              fotzibaer

              1. Hi,

                Klar, kann hier ' escapen, aber das kann man auch umgehen oder? Mit meinen Funktionen fange ich hauptsächlich ; ab...

                'Sven Rautenberg' bezog sich vermutlich nicht auf ein komplexes Schluesselwoerter-Escaping, sondern eher auf das Escapen der Hochkommata bzw. Anfuehrungszeichen.

                Das sollte sich auch auf Hochkommata beziehen...;)

                ich glaube, dass man z.B. das Hochkommata-Escaping nicht umgehen kann.   :-)

                Gruss,
                Lude

          2. Moin!

            Aber wie verhindere ich z.B. beim Einloggen folgendes:

            Du gibst ein:

            ' having 1=1 ---

            Und das Hochkomma-Escaping macht daraus:

            ' having 1=1 ---

            Im Zusammenbau des SQL-Strings wird dann daraus:

            SELECT * FROM tabelle WHERE feld = '' having 1=1'

            Ist ungefährlich.

            ' or tabelle.feld like 'a%' ---

            Dito.

            Klar, kann hier ' escapen, aber das kann man auch umgehen oder? Mit meinen Funktionen fange ich hauptsächlich ; ab...

            Escaping nimmt Sonderzeichen ihre Bedeutung. Dein Hochkomma ist also danach kein "Stringbeendigungshochkomma" mehr, sondern ein ganz einfaches Zeichen, das keine Wirkung entfaltet.

            - Sven Rautenberg

            --
            "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
            (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
  2. Hi,

    um es mit den Worten der gestern bei uns anwesenden Sicherheitsexperten von Microsoft zu sagen: Das muss der Admin halt pflegen: 99% der Server verwenden viele SPs wie z.B. die Shellzugriffsmöglichkeit überhaupt nicht - solche SPs sollten dann manuell entfernt werden, das gehört dann zur Serverwartung und -Pflege

    MfG
    Rouven

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(