ViewState in ASP.NET 1.0, 1.1 und 2.0 anschauen, schützen, verschlüsseln und Speicherort ändern
Jeder ASP.NET Programmierer wird schon desöfteren mit dem ViewState gearbeitet haben. Insgesamt eine schöne Sache, um Daten über Seitenaufrufe hinweg persistieren zu können, ohne sie erneut laden oder erzeugen zu müssen.
Wenn man sich den HTML Quelltext der Seite anschaut, wird man feststellen, dass es sehr kryptisch aussieht. Im Normalfall ist der Viewstate jedoch nur Base64 kodiert und nicht verschlüsselt. Um diesen Viewstate etwas lesbarer zu machen, gibt es auch nette Tools z.B. von Fritz Onion: ViewState Decoder. Für die ASP.NET Versionen 1.0, 1.1 und 2.0 kann man sich dort eine Version herunterladen und den Viewstate damit betrachten.
Was ich nicht verstehe ist, dass diese Ausgaben nicht auch gleich beim Tracing in ASP.NET angegeben werden, da sie für viele das Debugging wohl stark vereinfachen könnten. Im Tracing ist nur der Base64-kodierte Text enthalten.
Es ist auch möglich, den ViewState gegen Änderungen zu schützen und verschlüsseln. Dafür gibt es die Eigenschaft enableViewStateMac, die man in der machine.config, web.config oder direkt in der Seite setzen kann. Hierdurch wird ein Hash vom ViewState gebildet und dran gehängt. Durch das Setzen des machineKey “validation” in der machine.config kann man en ViewState verschlüsseln. Dennoch sollte man hier aufpassen, denn diese Einstellung kann ganz enorm Ressourcen kosten. Im Regelfall gilt: Keine sensiblen Daten im ViewState speichern, an die der Benutzer nicht rankommen soll und die er auch nicht direkt ändern soll.
Weitere Anpassungen an der ViewState Speicherung kann man auch machen, indem man die Methoden LoadPageStateFromPersistenceMedium und SavePageStateToPersistenceMedium überschreibt, die die ViewState laden bzw. speichern. Hier könnte man den ViewState bspw. in der Session oder explizit in der Datenbank speichern (sofern dies vom Aufwand her überhaupt Sinn macht).
Der Viewstate Decoder von Fritz Onion ist mittlerweile unter http://www.pluralsight.com/community/media/p/51688.aspx verfügbar.