Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verbergen der wahren Datenbankobjekt-ID in URLs

Diese Frage wurde oft gestellt, mit unterschiedlicher Wortwahl (was es schwierig macht zu sagen:"Suchen Sie einfach danach!"). Diese Tatsache veranlasste einen Blog-Beitrag mit dem Titel The Umfassender Leitfaden zur URL-Parameterverschlüsselung in PHP .

Was die Leute hier tun möchten

Was die Leute stattdessen tun sollten

Erklärung

Typischerweise wollen die Leute kurz zufällig aussehende URLs. Dies lässt Ihnen nicht viel Spielraum, um zu verschlüsseln und dann zu authentifizieren die Datenbank-Datensatz-ID, die Sie verschleiern möchten. Dazu wäre eine URL-Mindestlänge von 32 Byte (für HMAC-SHA256) erforderlich, was 44 Zeichen bei Base64-Codierung entspricht.

Eine einfachere Strategie besteht darin, eine zufällige Zeichenfolge zu generieren (siehe random_compat ). für eine PHP5-Implementierung von random_bytes() und random_int() zum Generieren dieser Zeichenfolgen) und stattdessen auf diese Spalte verweisen.

Außerdem sind Hashids defekt durch einfache Kryptoanalyse. Ihre Schlussfolgerung lautet:

Der von mir beschriebene Angriff ist deutlich besser als ein Brute-Force-Angriff, daher wird der Algorithmus aus kryptografischer Sicht als gebrochen angesehen, es ist ziemlich einfach, das Salz zurückzugewinnen; Dies ermöglicht es einem Angreifer, die Codierung in beide Richtungen auszuführen, und macht Eigenschaft 2 für eine ideale Hash-Funktion ungültig.

Verlassen Sie sich nicht darauf.