4 Stimmen

Schutz von IDs auf einer URL in ASP.NET MVC

Ich arbeite an einer typischen CRUD-Anwendung in ASP.NET MVC, wo es mehrere Benutzerkonten und jeder wird eine Reihe von Elementen haben.

Wenn ein Benutzer einen Artikel bearbeitet, tut er dies über eine URL wie /edit/5 wobei die Zahl die ID der Zeile in der Datenbank darstellt.

Ich habe Bedenken, dass ein Benutzer die ID einfach in die ID eines Artikels eines anderen Benutzers umwandelt und sie dann ändern kann. Um die ID zu schützen, habe ich mir folgende Lösungen überlegt:

  1. Verschlüsseln Sie es, damit es nicht so leicht verändert werden kann - aber dann brauche ich natürlich einen Code, um es jedes Mal zu entschlüsseln, wenn es zurückgeschickt wird.
  2. Ändern Sie das Datenbankschema so, dass neben der ID auch eine GUID erzeugt wird und diese in der URL verwendet wird.
  3. Lassen Sie die lesbare ID wie sie ist, und schließen Sie die UserID des angemeldeten Benutzers in Abfragen für das Element ein, so dass die Abfragen wie folgt aussehen würden:

    database.Items.SingleOrDefault(c => c.UserID == [aktuell eingeloggte Benutzer-ID] && c.ID == itemID);

Vielleicht gibt es einen besseren Weg oder einen Weg, an den ich noch nicht gedacht habe. Was ist Ihre bevorzugte Methode zum Schutz vor diesem Problem?

9voto

Darin Dimitrov Punkte 990883

Auf jeden Fall die dritte Lösung. Holen Sie sich die eingeloggte Benutzer-ID aus einer verschlüsselt Cookie (vgl. FormulareAuthentifizierung ) und verwenden Sie es in der SQL-Abfrage, um zu überprüfen, ob das Element dem Benutzer gehört.

5voto

Fredou Punkte 19430

Verlassen Sie sich nie auf Benutzereingaben, sondern prüfen Sie immer, ob der Benutzer Zugang dazu hat.

0voto

Yuriy Faktorovich Punkte 64670

Speichern Sie die UserID in der Session-Sammlung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X