2009-03-31 7 views
1

Ich möchte einige meiner URL-Parameter eine einfache Art von MAC hinzufügen. Dies ist nur als zusätzliche Verteidigungslinie gegen Anwendungsfehler und Caching Probleme/Bugs gedacht und nicht als irgendeine Form des Ersetzens der tatsächlichen Anmeldesicherheit in der Anwendung beabsichtigt. Eine gegebene Business-Objekt-ID ist bereits durch Backends geschützt, um auf einen einzelnen Benutzer beschränkt zu sein.Hinzufügen eines einfachen MAC zu URL-Parametern?

Also im Grunde möchte ich einen kurzen Authentifizierungscode zu meinen URL-Parametern hinzufügen, auf der Größe von 2-4 Zeichen. Ich denke, ich hätte gerne eine reversible Funktion in der Form von f (Business-Daten-ID + geloggte-User-ID + ??) = Hash, aber ich bin offen für Vorschläge.

Die primäre Intention ist, ID-Raten zu stoppen und sicherzustellen, dass URLs pro angemeldeten Benutzer ziemlich unterschiedlich sind. Ich auch nicht wollen etwas großes und klobig wie ein MD5.

Antwort

2

Da Sie keine kryptografische Qualität suchen, könnte ein 24-Bit-CRC Ihren Anforderungen entsprechen. Während MD5 in absoluten Zahlen "schnell" ist, ist CRC relativ "blendend schnell". Dann könnte das 3-Byte-CRC in vier Zeichen mit Base-64-Codierung textcodiert werden.

Hier ist eine Java-Implementierung der Prüfung für OpenPGP ASCII-Rüstung Prüfsummen verwendet:

private static byte[] crc(byte[] data) 
{ 
    int crc = 0xB704CE; 
    for (int octets = 0; octets < data.length; ++octets) { 
    crc ^= (data[octets] & 0xFF) << 16; 
    for (int i = 0; i < 8; ++i) { 
     crc <<= 1; 
     if ((crc & 0x1000000) != 0) 
     crc ^= 0x1864CFB; 
    } 
    } 
    byte[] b = new byte[3]; 
    for (int shift = 16, idx = 0; shift >= 0; shift -= 8) { 
    b[idx++] = (byte) (crc >>> shift); 
    } 
    return b; 
} 

Ich würde einen geheimen Schlüssel Hash (die nur von dem Server bekannt ist), zusammen mit dem, was Sie — schützen wollen wahrscheinlich die Kombination aus Objektkennung und Benutzerkennung.

+0

"Etwas" in diesen Zeilen stellte sich als genau das heraus, was ich gestern getan habe, aber ich habe mich immer noch über die 32-Bit-CRC- und -Base64-Kodierung gewundert. CRC24 löst * das * eine;) – krosenvold

0

Eine kurze Frage, für die ich sicher bin, dass es eine gute Antwort gibt, aber warum diese Informationen nicht in einem Cookie speichern?

Dann könnten Sie etwas Großes und Klobiges wie MD5 verwenden und Ihre URLs wären immer noch schön.

+0

Dies gilt für * alle * URLs mit Parametern, die ich von Server zu Client sende, also würde es eine Menge von ihnen geben. Und wie würde dies einen legitimen Benutzer vom ID-Raten abhalten? – krosenvold

+0

Sorry, ich sehe jetzt. Aber ich bin mir nicht sicher, welchen Zusatz der Zugriffscode für die URL-Parameter Ihnen gibt. Wenn Sie eine Authentifizierung und Zugriffssteuerung auf dem Back-End haben, ist Ihr Schutz vor ID nicht eine "Zugriff verweigert" -Nachricht, wenn ein Benutzer versucht, eine Ressource zu sehen, die er nicht sehen darf? –

+0

Zusätzliche Vorsichtsmaßnahme gegen Caching Bugs und ähnliche – krosenvold

1

Wenn was Sie wollen, ist im Grunde MD5, aber kleiner, warum nicht nur MD5, sondern nur die letzten 4 Zeichen? Dies fügt deinen URLs keinen riesigen Blob hinzu, es sind immer 4 nette Hexadezimalziffern.

+0

Da keine andere Antwort kam, war das, was ich auch dachte. Wenn Sie skeptisch sind, eine große Prüfsumme zu berechnen und nur einen kleinen Teil davon zu verwenden, denken Sie, dass der Rechenaufwand in Ordnung ist? – krosenvold

+0

Das Berechnen von MD5 ist ziemlich billig, aber benchmarken Sie es, um sicherzugehen. Wir haben MD5 einmal in einer engen Schleife verwendet, also haben wir uns sicher gestellt und konnten bis zu tausende pro Sekunde mit dem IIRC vergleichen. –

Verwandte Themen