Ankündigung

Einklappen
Keine Ankündigung bisher.

Token Generierung urlencode mit enthaltenen Slash geht nicht

Einklappen

Neue Werbung 2019

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

  • Token Generierung urlencode mit enthaltenen Slash geht nicht

    Halllo,

    ich habe ein Problem mit dem Zeichen %2F im URL, also der Slash (/). Sobald der in meinen Token enthalten ist, geht es nicht. Dieser taucht laut meinen Forschungen immer in einem generierten Hash von phpass auf.
    Das System wollte ich vereinheitlichen und nutze deshalb auch für die Token Generierung phpass. Als Workaround Versuch hatte ich einfach den Slash herausgeschnitten mit substr. Sollte ja dann immer noch eindeutig sein, wenn ich das jedes Mal mache. Ging so leider auch nicht. Mein derzeitiger Workaround wie folgt aus:
    PHP-Code:
    //$sToken = $hasher->HashPassword(uniqid());
    $sToken uniqid(rand(0999999));
    $sToken trim($sToken);
    $sToken base64_encode($sToken uniqid(rand(0,  999999)));
    $sToken substr($sToken0strlen($sToken) - 1); 
    Das ganze wird dann urlencoded und per E-Mail verschickt. Sobald da aber ein %2F geht es nicht. Irgendwelche Ideen oder Lösungen? Bin da auch neu in der Token Generierung. Für andere Vorschläge bin ich auch offen


    MFG derwunner

  • #2
    Ich nehme an du verwendest einen Router und extrahierst das Token aus der URL ? Falls das so ist, reicht es doch eigentlich aus wenn du für die relevante URI-Variable entsprechend "/" erlaubst. Oder als Query-Parameter übergibst dem das egal ist was da URL-kodiert transportiert wird.

    PhPass ist "uralter" Code, mir erschließt sich jetzt nicht wieso du eine eindeutige ID hashen willst.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Ja, richtig Router mit MVC Pattern. Allerdings macht der Router noch nichts, muss noch implementiert werden. Hab dafür ne einfache ini Datei.

      phpass ist einfach sicher und den ständigen Änderungen von PHP unabhängig.

      Das hashen mache ich damit man die ID nicht erraten kann. Oder kann man das nicht? Habe ich hier was falsch verstanden?

      Kommentar


      • #4
        Was ist denn ein Router mit MVC Pattern? Davon höre ich zum ersten mal. Hat dein Router Controller, Model und View oder wie muss man das verstehen?
        Zitat von derwunner
        "Ein FISI ist auf gut-deutsch der Netzwerker. Das heißt Du gehst rauß zum Kunden oder auf die Straße und verlegst Leitungen" - derwunner 2015

        Kommentar


        • #5
          Falls es Probleme mit einem Slash gibt, der Urlkodiert wurde, kann AllowEncodedSlashes in der Konfiguration vom Apache schuld sein.

          Wenn du wirklich eine Zufallszahl willst, schränke den Bereich nicht auf maximal 999999 ein sondern verwende rand() oder rand(0, PHP_INT_MAX).

          [MAN]uniqid[/MAN] ist für eindeutige Ids brauchbar, diese sind aber vorhersehbar. Wenn es zufällig sein soll braucht es [MAN]openssl_random_pseudo_bytes[/MAN].

          Kommentar


          • #6
            Vorab als Warnung: bei allen Funktionen geht es aber nicht um die Einzigartigkeit der generierten Sequenzen.
            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

            Kommentar


            • #7
              tr0y Deinen Beitrag letzten Beitrag verstehe ich nicht. Warum soll es nicht um die Einzigartigkeit gehen?

              Wegen Router mit MVC: Da habe ich mich wohl etwas falsch ausgedrückt. Ich meinte der Router prüft, ob es eventuell andere Routen gibt hinter der ein Controller liegt, also aliase oder mehrere URL´s die in der gleichen Cotroller/Action landen.


              Also was wäre nun sinnvoll als Registrierungs-Abschluss-Token?

              Kommentar


              • #8
                Bei deinem Token geht es schon um Einzigartigkeit. Bei den open_ssl_*-Methode(n) und uniqid generiert man nur eine Sequenz aus Zeichen dessen Einzigartigkeit maximal auf die aktuelle Script-Runtime ( uniqid ) garantiert ist. Wie man sowas bspw. mit einer Datenbank umsetzt um danach einen einzigartigen Schlüssel zu bekommen ( und dann zwecks Kollisionsvermeidung zu reservieren ) ist bspw. hier angeregt beschrieben: http://stackoverflow.com/questions/1...ng-using-mysql
                [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                Kommentar


                • #9
                  Bei der gelösten Antwort vestehe ich nicht, wie nur Großbuchstaben eindeutig sein können. Aus denen wird ja ein zufälliger substring gebildet.
                  Also letzendlich sind bei solchen Digen immer folgende Schritte zu tun:
                  1. einen Hash generieren
                  2. nach dem Hash in der DB Tabelle suchen. Falls nicht vorhanden einfügen. Falls vorhanden wieder zurück zu 1.


                  Meine Frage dazu ist nun noch, ob dieser lesender Prozess nicht langsam wird bei großen Datenmengen oder bei einem Angriff (was auch großen Datenmengen entspricht)?

                  Kommentar


                  • #10
                    rawurlencode(rawurlencode(x)) hilft manchmal ...

                    Kommentar


                    • #11
                      Zitat von derwunner Beitrag anzeigen
                      Das hashen mache ich damit man die ID nicht erraten kann.
                      So ein Unsinn. Mach, dass die ID genau die ID ist, die in deinem System so verwendet wird. Und dann häng ein Passwort dran, dass du zur Not ändern kannst:

                      PHP-Code:
                      $slug $id ':' substr(sha1(json_encode([$id$secret])), 08); 
                      Das was du da machst erzeugt im schlimmsten Fall mehrmals die gleiche ID. Zumal base64_encode Zeichen verwendet, die nur bedingt sinnvoll für eine URL sind.

                      https://eval.in/407624

                      Kommentar

                      Lädt...
                      X