Ich habe an einer asp.net-Anwendung gearbeitet, die eine Sicherheitsüberprüfung durch ein führendes Sicherheitsunternehmen durchlaufen hat, und diesen einfachen Trick gelernt, um eine weniger bekannte, aber wichtige Sicherheitslücke zu verhindern.
Die folgende Erklärung stammt von:
http://www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guidelines_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKey_to_Counter_One-Click_Attacks
Erwägen Sie die Verwendung von Page.ViewStateUserKey, um Ein-Klick-Angriffen entgegenzuwirken. Wenn Sie Ihre Anrufer authentifizieren und ViewState verwenden, legen Sie die Page.ViewStateUserKey-Eigenschaft im Page_Init-Ereignishandler fest, um Angriffe mit einem Klick zu verhindern.
void Page_Init (object sender, EventArgs e) {
ViewStateUserKey = Session.SessionID;
}
Setzen Sie die Eigenschaft auf einen Wert, von dem Sie wissen, dass er für jeden Benutzer eindeutig ist, z. B. eine Sitzungs-ID, einen Benutzernamen oder eine Benutzer-ID.
Ein Ein-Klick-Angriff tritt auf, wenn ein Angreifer eine Webseite (.htm oder .aspx) erstellt, die ein verstecktes Formularfeld mit dem Namen __VIEWSTATE enthält, das bereits mit ViewState-Daten gefüllt ist. Der ViewState kann aus einer Seite generiert werden, die der Angreifer zuvor erstellt hat, z. B. einer Warenkorbseite mit 100 Artikeln. Der Angreifer lockt einen ahnungslosen Benutzer zum Surfen auf die Seite, und dann veranlasst der Angreifer, dass die Seite an den Server gesendet wird, auf dem der ViewState gültig ist. Der Server kann nicht erkennen, dass der ViewState vom Angreifer stammt. ViewState-Validierung und HMACs wirken diesem Angriff nicht entgegen, da ViewState gültig ist und die Seite im Sicherheitskontext des Benutzers ausgeführt wird.
Durch Festlegen der ViewStateUserKey-Eigenschaft wird die Eigenschaft beim Navigieren des Angreifers zu einer Seite zum Erstellen des ViewState auf seinen Namen initialisiert. Wenn der legitime Benutzer die Seite an den Server sendet, wird sie mit dem Namen des Angreifers initialisiert. Infolgedessen schlägt die ViewState HMAC-Prüfung fehl und es wird eine Ausnahme generiert.