Suche, Suchoperatoren und MySQL Injections

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

  • Suche, Suchoperatoren und MySQL Injections

    Hi,

    ich arbeite gerade an einer "Boolschen Volltextsuche" für meine Website.

    Dafür gibt es z.B. die Suchoperatoren "", +, -.

    Das Problem ist jetzt das der Suchstring per GET geliefert wird. Da es ja die Suchoperatoren "" gibt muss ich das per GET gelieferte mit stripslashes reinigen da durch Safemode ja Slashes hinzugefügt werden. So ist die Seite aber durch MySQL Injections extrem gefährdet. Kann ich das irgendwie anders lösen, dass Anführungszeichen benutzt werden können aber trozdem keine Angriffe durchgeführt werden können.

    Danke im Vorraus!

    Micronax

  • #2
    Re: Suche, Suchoperatoren und MySQL Injections

    Original geschrieben von micronax
    Das Problem ist jetzt das der Suchstring per GET geliefert wird.
    Und wenn er aus der Tasche der Putzfrau käme ...
    Wo Daten herkommen, interessiert kein Bisschen.
    Da es ja die Suchoperatoren "" gibt muss ich das per GET gelieferte mit stripslashes reinigen da durch Safemode ja Slashes hinzugefügt werden.
    Was ist denn das für eine verquere Argumentation?

    Die Slashes haben nichts mit dem safe_mode zu tun, sondern mit magic_quotes_gpc.

    Da magic_quotes_gpc aktiviert ist, bereinigst du die Daten natürlich mit strip_slashes [1] - Standardvorgehen, würdest du in jedem anderen Fall genauso machen, hat mit Volltextsuche oder nicht nichts zu tun.

    Da du die Daten in eine MySQL-Query einsetzen möchtest, behandelst du sie anschließend entsprechend [1] - Standardvorgehen, würdest du in jedem anderen Fall genauso machen, hat mit Volltextsuche oder nicht nichts zu tun.


    [1] Da steht natürlich in beiden Fällen ein imaginäres "hoffentlich" dahinter.


    Und wo ist jetzt eigentlich dein Problem ...?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      --> http://mysql.com/doc/refman/5.1/de/fulltext-boolean.html

      Dafür sind die Operatoren "" und + etc. Optional.

      es ist mir so ziemlich egal durch was diese Slashes verursacht werden. Hauptsache ist, wenn ich sie entferne, kann jeder z.B.

      seach.php?query='; DROP TABLE config;

      eingeben und schon is die Tabelle config weg. Das wäre nicht so optimal. Desshalb habe ich geafragt: "Was könnte man machen damit die Anführungszeichen ordentlich dargestellt werden aber keine SQL Injections möglich sind."

      Micronax

      Kommentar


      • #4
        Dann überlege dir, wie du "böse" Anführungszeichen von "guten" unterscheiden kannst - und behandle dann nur letztere, bzw. erstere nicht.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Mal unter uns: mysql_query führt nur 1 SQL-Anweisung aus, ein Drop-Table nach einem Select ist nicht möglich.


          (Was NICHT heißt dass man nicht viele andere böse Dinge mit SQL-Injections machen kann!)
          Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
          var_dump(), print_r(), debug_backtrace und echo.
          Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
          Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
          Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

          Kommentar


          • #6
            Jop. Das meinte ich mit den "bösen" und den "guten". Und mir fällt eben dazu gerade nichts ein, desshalbt habe ich hier Hilfe gesucht.

            Micronax

            Kommentar


            • #7
              Original geschrieben von micronax
              Das meinte ich mit den "bösen" und den "guten". Und mir fällt eben dazu gerade nichts ein
              Dann denke intensiver drüber nach.

              Erstelle dir ein paar Beispielwerte, die übergeben werden könnten - und versuche sie zu bewerten, ob sie "gut" oder "böse" sind.
              Dann sollte auch ein Muster erkennbar werden, welches genauere Überlegungen erlaubt, wie man sich dem Problem weiter nähern kann.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Ja.. das Problem ist eben, es ist eine Suche. Das heiß es könnte auch jemand nach (ZUM BEISPIEL!) "; DROP TABLE" such oder "SELECT password FROM admin". Man kann nach allem suchen. Und desshalb ist das ja ned so einfach. Ansonsten könnte ich eben einige Wörter aussortieren.

                Und noch eine Frage, die nichts mit diesem Thema zu tun hat:
                Gibt es irgendeine Funktion (hab auch keine gefunden ) die true zurückgibt wenn STRING in STRING gefunden wurde. Also nichts ersetzen oder so einfach nur finden und TRUE zurückgeben?


                Micronax

                Kommentar


                • #9
                  Original geschrieben von micronax
                  Ja.. das Problem ist eben, es ist eine Suche. Das heiß es könnte auch jemand nach (ZUM BEISPIEL!) "; DROP TABLE" such oder "SELECT password FROM admin". Man kann nach allem suchen.
                  Ja, und?

                  Warum sollte man denn nicht nach DROP TABLE suchen können?


                  Und noch eine Frage, die nichts mit diesem Thema zu tun hat:
                  Gibt es irgendeine Funktion (hab auch keine gefunden ) die true zurückgibt wenn STRING in STRING gefunden wurde. Also nichts ersetzen oder so einfach nur finden und TRUE zurückgeben?
                  Sowas ähnliches zumindest - also schau im verdammten Manual nach.

                  Dass du offenbar kaum in der Lage bist, auch nur irgendwas selber zu finden, wird auch dadurch nicht witziger, dass du einen Smilie dahintersetzt.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Wunderbar.. ich habe aber nichts gefunden. Und wenn ich nach 2 Minuten nichts finde, dann finde ich auch nichts nach 2 Stunden.

                    Jetzt mal ein direktes Beispiel:

                    Jemand gibt in das Suchfeld folgendes ein:

                    Code:
                    'Wozu CSS verwenden
                    dann wird das am Anfang stehende ' mit in die Abfrage eingefügt.

                    Dann erhalte ich ein MySQL-Error, weil die Syntax nicht mehr stimmt.

                    Kommentar


                    • #11
                      Original geschrieben von micronax
                      Wunderbar.. ich habe aber nichts gefunden. Und wenn ich nach 2 Minuten nichts finde, dann finde ich auch nichts nach 2 Stunden.
                      Dann verbessere deine Suchstrategie.

                      Sollen zwei Minuten etwa ausreichen, um die Lösung für ein Problem zu finden? Vermutlich in den meisten Fällen kaum.

                      Wenn du aber in zwei Stunden nur genauso viel Leistung zu erbringen in der Lage bist, wie in zwei Minuten - dann hoffe ich nur, dass du dafür nicht bezahlt wirst.


                      Jetzt mal ein direktes Beispiel:
                      Du brauchst mir nicht erklären, was SQL-Injection ist.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        So war das nicht gemeint. Problem behoben!


                        Micronax

                        Kommentar

                        Lädt...
                        X