Verhindern query string manipulation, indem ein hash?
Schützen Sie eine web-Anwendung von query string manipulation, ich wurde erwägt, einen query-string-parameter jede url, die speichert einen SHA1-hash aller anderen query-string-Parameter & Werte, dann ist die Validierung mit dem hash auf jede Anfrage.
Funktioniert diese Methode bieten starken Schutz gegen Benutzer die manipulation der query-string-Werte? Gibt es irgendwelche weiteren Nachteile/Nebenwirkungen, dies zu tun?
Ich bin nicht besonders besorgt über die 'hässlichen' urls für diese private web-Anwendung. Url 's werden noch "bookmarkable", wie der hash ist immer der gleiche für den gleichen query-string-Argumente.
Dies ist ein ASP.NET -Anwendung.
- Warum nicht einfach echte Sicherheit/Authentifizierung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht sicher, ob dies bietet jede Art von Sicherheit. Wenn ein man-in-the-middle-Angreifer will, um die Parameter zu ändern, alles, was Sie tun müssen, ist den query-string ändern und neu berechnen, die SHA-1-Hashwert und sendet die Anforderung an den server.
Beispielsweise die URL vom browser gesendeten könnte:
http://www.example.com/addUser.html?parameterA=foo&hash=SHA1 -("parameterA=foo")
Wenn ein Angreifer fängt die, Sie Bearbeiten können, es auf diese Weise:
http://www.example.com/adduser.html?parameterA=bar&hash=SHA1 -("parameterA=bar")
Wirklich, das läuft darauf hinaus, dem Sie Vertrauen können der hash-nur so viel, wie der Parameter selbst.
Einer Weise, die Sie dieses Problem beheben könnte wäre, wenn der Benutzer hat ein Kennwort, das nur Sie und den server kennt, dann wäre es unmöglich für den Angreifer berechnen den hash, wenn Sie die Parameter ändern. Zum Beispiel:
http://www.example.com/addUser.html?parameterA=foo&hash=SHA1 -("parameterA=foo"+"theuserpassword")
Aber nicht das Passwort als Parameter in der URL 🙂
Ist es wichtig zu beachten, dass dies nicht dem Stand der Technik für die überprüfung der Integrität von Nachrichten bestanden zwischen den beiden Parteien. Was wird heute verwendet, ist eine form des Hash-based Message Authentication Code (HMAC) - Algorithmus, der ist ziemlich gut beschrieben in HMAC, und endgültig in RFC2104 und FIPS Pub 198-1.
Meine Lösung um zu verhindern, dass query-string-manipulation mit no hash:
In der globalen.asax-Datei
Könnten Sie denken, mit diesem kleinen open-source-Bibliothek:
http://www.codeproject.com/KB/aspnet/Univar.aspx
Es verwendet einen eindeutigen Schlüssel für jeden client-computer und kommt mit vielen anderen leckereien.
Ich denke, das ist eine gute Idee, fügen Sie einen parameter mit einem hash aller anderen Parameter. Es verhindert radikal den querystring manipulation, aber Sie haben zu denken über das problem, dass bedeutet, dass die Verwendung dieser URLs in andere Seiten Ihrer Bewerbung, senden Sie diese URLs auf die öffentlichen oder verwenden Sie Sie in gedruckter Weise. Sie müssen eine sehr gute Möglichkeit, um zu bestellen und zu haben Sie Sie bei der hand speccially wenn diese Seiten nicht dynamisch erstellt werden, oder wenn Sie müssen nur fügen Sie diese URLs per hand.
Ich sehe keine andere problem. Einige kann man sagen, dass die hash berechnet werden können, aber Sie können spielen mit der Reihenfolge der Parameter der Beschaffung unterschiedliche hashes und sehr schwer zu erraten.
Ein großes problem mit diesem ist, dass javascript zu tun haben-client-side-SHA-Berechnungen nur verlinken auf Seiten, dies hängt natürlich, wie viel Sie verwenden JS, aber es sollte nicht unresonable zu denken, dass ein get argument zählen könnte pageNo=1, und a 'zur Seite springen' input-box, das wäre schwierig, wenn Sie fügen Sie einen hash. Sie könnte in einer session speichern (server-Seite) etwas, dass Sie wirklich nicht wollen, manipuliert werden.