Was ist sicherer als versteckte Formularfelder in ASP.NET MVC?
In ASP.NET MVC (default routing),ich möchte eine URL verwenden, wie dies wieder einen View mit einem Formular zum Bearbeiten eines Kunden:
/Customers/Edit/5
Muss ich nutzen CustomerId=5
, aber ich will nicht zu erlauben, einen Kunden zu ändern.Jetzt mache ich die id versteckt mit:
<%= Html.Hidden("CustomerId") %>
Diese leistet, was ich will,aber ich bin unter dem Eindruck, dass versteckte Formular-Variablen sind nicht sicher und können manipuliert werden durch den Endbenutzer.
Also, was ist der beste Weg, um einen Kunden zu Bearbeiten Ihre Informationen, aber nicht Ihre ID?
InformationsquelleAutor der Frage royco | 2009-04-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
War meine Lösung zu verwenden, die Tamper-Proof-code aus Steven Sanderson ASP.NET MVC-Buch. Die Idee ist, dass Sie erstellen einen hash von versteckten Formularfeld, die Sie wollen, um tamper-proof:
Wenn das Formular abgeschickt wird, Steven-code berechnet dann einen anderen hash der CustomerId und stellt sicher, es entspricht CustomerIdHash. Wenn es funktioniert, dann keine Manipulation stattgefunden hat. Es ist toll-code, und lohnt sich der Preis des Buches.
InformationsquelleAutor der Antwort royco
Prüfen Sie die Berechtigungen in einer controller-action (/Customers/Edit), bevor Sie anzeigen, die nach Ansicht. Beachten Sie, dass das problem hier ist nicht mit dem hidden-Feld überhaupt: könnte ein Benutzer geben Sie einfach "http://yoursite.com/Customers/Edit/10" in seinem browser. Also Sie haben zu prüfen, in Ihre Aktion, ob der Nutzer auch wirklich Bearbeiten dürfen angeforderten Kundendaten, egal, wie er aufgerufen, die Aktion.
InformationsquelleAutor der Antwort Dmitry Perets
Sie tun keine echte Sicherheit auf der browser-Seite. Sie können die Kunden-ID in den query-string, aber der server sollte überprüfen, ob oder nicht Sie wirklich erlaubt zu Bearbeiten, die Kunden. Wenn nicht, wird ein Fehler zurückgegeben.
InformationsquelleAutor der Antwort 1800 INFORMATION
Tamper-proofing hidden-fields ist alles schön und gut, aber das ist immer noch security through obscurity. Es ist immer am besten, um sichere web-site, insbesondere MVC, durch die Sicherung der Controller und Aktionen. Dann kann der Benutzer manipulieren, wie Sie wollen, und Sie sind nicht überall zu bekommen.
InformationsquelleAutor der Antwort eccsolutions
Ich habe das gleiche problem und ich glaube, die Lösung besteht in der Verwendung von Ersatzschlüsseln. In jeder Tabelle wo ich eine Spalte " ID " habe ich auch eine Key-Spalte, die eine Guid (uniqueidentifier in SQL server). Nun, wenn Sie Verknüpfungen oder innere Logik verwende ich die ID, aber der controller alle verwenden Sie die-Taste. Da es sich um eine Guid, es ist schwer zu erraten, was ein weiterer Rekord Guid.
Alternativ (oder zusätzlich zu den oben genannten) könnte man verschlüsseln, das versteckte Feld nach Dieser Artikel
InformationsquelleAutor der Antwort HitLikeAHammer
Gibt es zwei Aspekte. Ich bin mir nicht sicher, welche Sie direkt zu Fragen, aber Sie sind beide wichtig:
InformationsquelleAutor der Antwort Erv Walter