Verhindert die Änderung des versteckten Feldes

7

Was passiert, wenn ich das ChangePassword-Formular mit dem versteckten ID-Feld des Benutzers habe?

BadPerson kennt ID von GoodPerson. Er öffnet das Change Password-Formular mit FireBug, ändert seine ID in GoodPersons ID, sodass sich das Passwort für GoodPerson ändert.

Natürlich kann ich eine Serverlogik erstellen, die das verhindert, aber ich denke, es sollte eine Out-of-the-Box-Lösung geben, die wirft, wenn das versteckte Feld geändert wurde, was ich nicht weiß.

Danke im Voraus.

BEARBEITEN Ok, Passwort ändern ist ein schlechtes Beispiel. Jedes Bearbeitungsformular, bei dem ich eine ID in einem versteckten Feld habe, hat dasselbe Problem.

    
er-v 15.05.2010, 13:12
quelle

2 Antworten

6

Es gibt nichts, was Sie wissen lässt, dass ein Wert eines verborgenen Feldes geändert wurde oder nicht. Damit ein Benutzer sein Passwort ändern kann, muss er authentifiziert werden. Bei Verwendung der Formularauthentifizierung wird die ID des aktuell authentifizierten Benutzers in einem verschlüsselten Cookie gespeichert, das nicht geändert werden kann.

Dies bedeutet, dass Sie keine versteckten Felder zum Speichern des aktuell verbundenen Benutzers verwenden sollten. Verwenden Sie einfach den integrierten FormsAuthentication-Mechanismus in ASP.NET und speichern Sie diese Informationen niemals in ausgeblendeten Feldern . Die Art und Weise, wie ASP.NET weiß, dass der Wert des Cookies nicht manipuliert wurde, ist, dass es mit dem machineKey in der Konfiguration angegeben.

Es gibt eine wichtige Regel, die Sie beim Umgang mit Sicherheit und Authentifizierung beachten sollten: Verwenden Sie immer eingebaute Sicherheitsmechanismen, rollen Sie niemals eigene.

    
Darin Dimitrov 15.05.2010, 13:14
quelle
20

Ich stimme Darin zu, dass die Formularauthentifizierung sich um das oben erwähnte spezifische Problem kümmert (Änderung eines Passworts). Diese Antwort bezieht sich auf die allgemeinere Frage, ob der Wert eines versteckten Feldes nicht geändert wird.

Die beste Lösung besteht darin, ein weiteres verstecktes Feld einzufügen, das einen Hash des Wertes des ersten versteckten Feldes enthält. Wenn das erste versteckte Feld geändert wird, wissen Sie es. Das generierte HTML sieht ungefähr so ​​aus:

%Vor%

Dieser Artikel zeigt, wie Sie es tun und einbinden Quellcode für eine Erweiterung Html.SecuredHiddenField , die sich um die Logik für Sie kümmert.

    
Keltex 15.05.2010 13:28
quelle