Enrico: RegExp: URL + genau 32 Zeichen langem Token prüfen

Hallo,

ich überprüfe die URLs unserer Homepage, die durch Aufrufen der einzelnen Seiten gesendet werden, anhand von Mustern, um zu verhindern, dass nicht erlaubte Anweisungen eingeschleust werden:

Beispiele:

/^Gaestebuch__Lesen.php?Seite=[19]{1,}$/
Hier ist ausschliesslich der String "Gaestebuch__Lesen.php?Seite=" erlaubt, gefolgt von mindestens einer Ziffer

/^Gaestebuch__Eintragen.php$/
Hier ist ausschliesslich der String "Gaestebuch__Eintragen.php" erlaubt

Da ich Einträge in unser Gästebuch nur nach Anklicken eines an die E-Mail-Adresse des Besuchers geschickten Bestätigungslinks freigeben will, muss ich bei meiner Absicherung ein weiteres Muster angeben, das aus dem String "Gaestebuch__Speichern.php?Bestaetigung=angeklickt&Token=" und einem genau 32 Zeichen langen Token besteht. Der Token selbst besteht nur aus Kleinbuchstaben sowie Ziffern.

Beispiel:
Gaestebuch__Speichern.php?Bestaetigung=angeklickt&Token=7802b598cecb40806c3e7249f564b36c

Sicherlich kann ich über folgendes Muster prüfen, ob nur Buchstaben oder Ziffern übergeben wurden, aber wie muss ich das Muster erweitern, um auch gleichzeitig testen zu können, dass der Token aus genau 32 Zeichen besteht?

/^Gaestebuch__Lesen.php?Seite=[a-z0-9]{1,}$/

Eben genanntes Muster würde auch durchgehen, wenn der Token nur aus einem Kleinbuchstaben oder einer Ziffer besteht.

Vielen Dank für eure Hilfe.

Gruß
Enrico

  1. Hi,

    /^Gaestebuch__Lesen.php?Seite=[19]{1,}$/
    Hier ist ausschliesslich der String "Gaestebuch__Lesen.php?Seite=" erlaubt, gefolgt von mindestens einer Ziffer

    genauer: Mindestens einmal die Ziffer 1 oder 9.

    Gaestebuch__Speichern.php?Bestaetigung=angeklickt&Token=7802b598cecb40806c3e7249f564b36c
    Sicherlich kann ich über folgendes Muster prüfen, ob nur Buchstaben oder Ziffern übergeben wurden, aber wie muss ich das Muster erweitern, um auch gleichzeitig testen zu können, dass der Token aus genau 32 Zeichen besteht?

    Gib die geünschte Anzahl als Quantifizierer an: {32,32} oder kürzer {32}.

    Ciao,
     Martin

    --
    Wenn Zeit das Kostbarste ist, was wir haben, dann ist Zeitverschwendung die größte aller Verschwendungen.
      (Benjamin Franklin, amerikanischer Tüftler und Politiker)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hallo Martin,

      danke für Deine rasche Antwort.

      Aber ist es nicht so, dass dann auch (theoretisch) 32 a's, gefolgt von 32 Nullen durchgehen würden, wenn ich /^Gaestebuch__Lesen.php?Seite=[a-z0-9]{32}$/ schreibe oder ist dies so zu sehen, dass die in eckigen Klammern definierten Bereiche insgesamt genau 32x vorkommen müssen, egal welche Zeichen aus den Bereichen verwendet werden?

      Gruß
      Enrico

      1. Hallo Enrico,

        Aber ist es nicht so, dass dann auch (theoretisch) 32 a's, gefolgt von 32 Nullen durchgehen würden, wenn ich /^Gaestebuch__Lesen.php?Seite=[a-z0-9]{32}$/ schreibe

        nein, eben nicht.

        oder ist dies so zu sehen, dass die in eckigen Klammern definierten Bereiche insgesamt genau 32x vorkommen müssen, egal welche Zeichen aus den Bereichen verwendet werden?

        Die eckige Klammer repräsentiert nach außen *genau ein* beliebiges Zeichen aus der Menge, die in der Klammer steht. Erst zusammen mit einem Quantifizierer wie + oder * oder {} matcht der Gesamtausdruck aus Klammer und Quantifizierer eventuell auch mehrere Zeichen, die zu dieser Menge passen.

        Ciao,
         Martin

        --
        Niemand ist überflüssig: Er kann immer noch als schlechtes Beispiel dienen.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hallo Martin,

          ok, jetzt weiß ich Bescheid :-)

          Danke und noch einen schönen Tag.

          Gruß
          Enrico

  2. Hi!

    ich überprüfe die URLs unserer Homepage, die durch Aufrufen der einzelnen Seiten gesendet werden, anhand von Mustern, um zu verhindern, dass nicht erlaubte Anweisungen eingeschleust werden:

    Was befürchtest du eigentlich? Eingeschleust werden kann nur dann etwas, wenn du Werte unbesehen speicherst oder überträgst. Alles, was einfach nur unbeachtet rumliegt, kann nichts tun. Wenn du die Befürchtung hast, zufällig da draufzutreten, dann ist vielleicht dein Programmierstil mangelhaft, beispielsweise wenn du Variablen vor dem Erstgebrauch nicht definiert initialisierst.

    Da ich Einträge in unser Gästebuch nur nach Anklicken eines an die E-Mail-Adresse des Besuchers geschickten Bestätigungslinks freigeben will, muss ich bei meiner Absicherung ein weiteres Muster angeben, das aus dem String "Gaestebuch__Speichern.php?Bestaetigung=angeklickt&Token=" und einem genau 32 Zeichen langen Token besteht. Der Token selbst besteht nur aus Kleinbuchstaben sowie Ziffern.
    Beispiel:
    Gaestebuch__Speichern.php?Bestaetigung=angeklickt&Token=7802b598cecb40806c3e7249f564b36c

    Dann schau dir genau diese beiden Werte im $_GET an. Alles andere ist doch Würstchen, solange du es unbeachtet lässt. Und wenn du die Sicherheitslücke register_globals befürchtest, dann ist es sowieso bereits zu spät, wenn du erst im Script Gegenmaßnahmen ergreifst.

    Sicherlich kann ich über folgendes Muster prüfen, ob nur Buchstaben oder Ziffern übergeben wurden, aber wie muss ich das Muster erweitern, um auch gleichzeitig testen zu können, dass der Token aus genau 32 Zeichen besteht?

    Egal wie lang der Token ist, du musst nur wissen, ob er in der List der erlaubten Tokens enthalten ist oder nicht.

    Lo!