URL manipulieren

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

  • URL manipulieren

    Hallo

    Wie kann ich am besten überprüfen, ob eine URL manipuliert wurde? Falls die URL manipuliert wird, möchte ich gerne sämtliche Fehlermeldungen vorher abfangen.

    PHP-Code:
    $page $_GET['page']; // füllt die Variable $page mit Inhalt

    if (!isset($page)) { // ist die Variable $page bereits gesetzt?
      
    $page 1;         // wenn nicht, dann fülle Sie mit dem Wert 1
    }

    $result mysql_query('SELECT * FROM test LIMIT $page'); // sendet eine Anfrage an die zur Zeit aktive db 
    Schön und gut. Jetzt wird bei jedem Aufruf geprüft, ob $page schon gefüllt ist.

    Was ist nun, wenn der Benutzer hinter der Variable die URL z.B. so manipuliert? xy.php/page=dls43@$ls? Dann erhält man eine schreckliche Fehlermeldung.

    Gibt es da eine einfach und gute Lösung, um eine eventuelle Fehlermeldung abzufangen?

  • #2
    Eine Einfache auf jeden Fall:
    PHP-Code:
    $result mysql_query('SELECT * FROM test LIMIT '.(int)$page); 
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      Ja, die ist einfach

      Mit dem Integer habe ich mir auch schon überlegt, aber den werden ja die negativen Zahlen, Oktalzahlen und Hexadezimal Zahlen auch "durchgelassen"?

      Gibt es noch etwas anderes? Eventuell Zeichen ersetzen? Aber das dürfte wohl eine etwas schlechtere Lösung sein?

      Kommentar


      • #4
        Hi !

        So direkt würde ich nie eine Variable an eine SQL-Abfrage weitergeben. Ich löse das auf eine meinetwegen etwas umständliche, aber sichere Variante.
        if (page =1) {
        page=1
        } elseif (page=2) {
        page=2
        ...
        } else {
        page=1
        }

        So kann ich sicher gehen, dass keine bösen Zeichen oder sonstwas in die Abfrage reinkommen. Und wenn du nicht 5000 Möglichkeiten für page hast, dann sollte das machbar sein.
        Sicher ist es auch möglich, den Inhalt von page irgendwie zu parsen und mit allen möglichen Befehlen zu bearbeiten, aber ist mir für mich zuviel Aufwand.

        Gruß

        Le Cheffe

        Kommentar


        • #5
          Naja, die Variante is normalweise nicht machbar (Forum, Memberliste, ...)

          Ich würde es so machen:
          PHP-Code:
          $page $_GET['page']

          if( !
          ctype_digit($page) ) {
          ->
          fehler
          }

          if( !
          sql_abfrage_page($page) ) {
          ->
          fehler
          }else{
          ausgabe

          Und in der sql_abfrage_page() halt checken ob die http://de.php.net/mysql_real_escape_string($page) existiert und mit true/false antworten.

          Kommentar


          • #6
            Original geschrieben von Le_Cheffe
            Ich löse das auf eine meinetwegen etwas umständliche, aber sichere Variante.
            if (page =1) {
            page=1
            } elseif ...
            So kann ich sicher gehen, dass keine bösen Zeichen oder sonstwas in die Abfrage reinkommen.
            Außerdem kannst du so sichergehen, dass er immer nur in den allerersten IF-Zweig reingeht - brauchst also die restlichen gar nicht mehr ausprogrammieren *respekt*
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Wuahahaha ;-)))

              Prüfe den übergebenen Wert einfach auf seine Gültigkeit, zB den Datentyp des Tabellenfelds. Das kannst du mit is_numeric und ggf. strlen. Des Weiteren ist eine negative Zahl im SQL-Statement syntaktisch nicht inkorrekt, also bekommst du einfach keinen Datensatz zurück. Und das musst du ja sowieso abfangen.

              Kommentar


              • #8
                Original geschrieben von saraneus
                Des Weiteren ist eine negative Zahl im SQL-Statement syntaktisch nicht inkorrekt, ...
                Cool ... das muss ein neuer Sicherheitsmechanismus sein, den ich noch nicht kenne ... !

                ... und wenn ich dann 'nen negativen Wert speichern will ... wie mache ich das in Deiner neuen SQL-Version ... ?!
                carpe noctem

                [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                Kommentar


                • #9
                  Original geschrieben von goth
                  Cool ... das muss ein neuer Sicherheitsmechanismus sein, den ich noch nicht kenne ... !
                  Ich bin sicher, du hast dich nur verlesen ...

                  Kommentar


                  • #10
                    Das denke ich auch ... den zitierten Blödsinn kannst Du nicht geschrieben haben ... mein Fehler ... !
                    carpe noctem

                    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                    Kommentar


                    • #11
                      Original geschrieben von goth
                      Das denke ich auch ... den zitierten Blödsinn kannst Du nicht geschrieben haben ... mein Fehler ... !
                      Geschrieben hab ich's, aber den "Blödsinn" hast DU interpretiert. Nochmal für's bayerische Ausland:

                      "ist eine negative Zahl im SQL-Statement syntaktisch nicht inkorrekt" bedeutet "ist eine negative Zahl im SQL-Statement syntaktisch gültig"

                      Code:
                      if("nicht inkorrekt" == "gültig") {
                          echo "Jetzt hast du's kapiert.";
                      }

                      Kommentar


                      • #12
                        Die Logik in deiner Welt tickt halt bissel anders.


                        Ich hab doch schon nen Prima vorschlag gemacht, Ruhe jetzt. :P

                        Kommentar


                        • #13
                          Erstmal vielen Dank für zahlreichen Beiträge *super* - sind ein paar gute Ansätze dabei

                          Am besten gefällt mir die Lösung mit den Dezimalzeichen (ctype_digit).

                          Mal ausprobieren.

                          Kommentar

                          Lädt...
                          X