2016-11-23 5 views
0

Ich habe einen Webserver, der nur Downloads von Dateien ermöglicht, wenn Sie ein Token auf dem Querystring übergeben. Dieses Token (im Grunde ein Hash) wird mit dem Hash-Ergebnis des Dateipfads + Remote-IP verglichen.Umgang IP-signierte URL und Ändern von IPs

Das hat perfekt funktioniert! Da jedoch ein Projekt von mir mehr öffentliches Interesse gewonnen hat, haben sich obskure Probleme gezeigt.

Die Benutzer rufen die signierten URLs von einer API ab. API load balanciert die Anfrage und gibt eine gültige URL für die anfragende IP zurück. Allerdings haben einige Leute wirklich funky Netzwerk-Setups und können grundsätzlich ihre IP-Adresse von Anfrage zu Anfrage ändern! Z.B. Einige Universitätsnetzwerke leiten das gesamte Internet über einen Loadbalanced-Proxy.

Das ist sehr problematisch ... Ich habe versucht, eine Alternative zu finden, aber ich bin irgendwie fest. Das einzige, was ich mir vorstellen kann, ist eine auslaufende Verbindung, die nicht an die IP gebunden ist, aber das bringt andere Arten von Problemen mit sich.

Welche Optionen habe ich außer ablaufenden URLs? Was kann ich tun, um das IP-basierte System weiterhin zu verwenden? Ich kann Proxy-Header nicht vertrauen. Ich muss mit Informationen arbeiten, die die Benutzer nicht direkt manipulieren können ...

Ich habe auch darüber nachgedacht, stattdessen ein Token für einen IP-Bereich zu generieren. Aber es ist nicht ideal und löst nur das Problem, wenn die IPs in Reichweite sind (von denen ich schon Fälle gesehen habe). Also stecke ich im Moment fest.

Würde gerne über das lesen, was Sie vielleicht vorschlagen.

+0

Mit welcher Bedrohung möchten Sie sich schützen? –

+0

Gute Frage. Grundsätzlich teilen Sie die URLs mit den Dateien. Im Allgemeinen werden Sie, sobald Sie über die API angefordert und genehmigt wurden, sofort mit dem Herunterladen einer oder mehrerer Dateien beginnen. Auslaufende Tokens sind deshalb auch problematisch. Da ist nicht zu sagen, wie lange man braucht, um Sachen herunterzuladen, und ich möchte signierte URLs im Stapel senden. Nicht eins nach dem anderen. Dieses Töten für die Bandbreite, da manchmal mehr als tausend Dateien heruntergeladen werden müssen. Nur diejenigen, die von der API genehmigt wurden, greifen auf die Dateien vom zugewiesenen Loadbalanced-Server zu. –

Antwort

1

Was Sie suchen, ist unmöglich, fürchte ich.

Sie wollen im Grunde einen Benutzer (die Person) authentifizieren, ohne .. naja, authentifizieren den Benutzer. Alles, was Sie in der Anfrage haben, kann vom Kunden gefälscht werden, was bedeutet, dass ein anderer Kunde dieselbe Anfrage stellen kann, egal, was Sie tun, solange die Kunden zusammenarbeiten und Daten austauschen. Der einzige Unterschied, der etwas schwieriger über TCP zu fälschen ist, ist die Client-IP, die sich andererseits manchmal ändert, wie Sie auch bemerkt haben.

So gibt es keine kryptographische (= einigermaßen sichere) Lösung.

Wenn Sie es für einen Angreifer etwas schwieriger machen möchten und Ihre Clients Browser sind, können Sie versuchen fingerprinting die browser. Das ist in vielen Fällen überraschend genau, kann aber offensichtlich auch gefälscht werden. Es hebt die Messlatte ein wenig für Leute, die versuchen, Links zu teilen.

+0

Vielen Dank für Ihre Gedanken, nicht so komisch, dass ich keine Lösung finden konnte! Ich werde deine Links untersuchen und zurück melden :) –