Il ViewState inviato attraverso il browser è consigliabile che non venga mai utilizzato come contenitore di informazioni sensibili, a meno che non venga criptato.
Uno dei modi per evitare problemi legati al ViewState è necessario utilizzare HMAC (Hashed message authentication codes), che è abilitato di default e consente di evitare il cosiddetto tampering del ViewState.
Le modalià attraverso le quali viene regolato il comportamento del ViewState sono contenute nell'attributo ViewStateEncryptionMode della direttiva @Page o del web.config.
<%@Page ViewStateEncryptionMode="Always" %> <configuration> <system.web> <pages viewStateEncryptionMode="Always" /> </system.web> </configuration>
Di default il valore è impostato su Auto, che fa sì che il ViewState della pagina sia criptato solo se viene richiamato in maniera specifica da uno dei controlli presenti sulla stessa il metodo RegisterRequiresViewStateEncryption della classe Page. Impostandolo su Always si ha l'effetto, nelle pagine in cui si vuole raggiungere una sicurezza maggiore, che questo venga sempre fatto.
Infine, bisogna impostare come algoritmo di decriptazione, all'interno del web.config, la chiave decryption sui valori AES o 3DES, con il primo come valore suggerito in quanto utilizza un algoritmo considerato più sicuro. Se questo non viene fatto, ASP.NET non effetta l'encrypt del ViewState, che è tra l'altro il comportamento di default, essendo il valore predefinito "Auto".
<configuration> <system.web> <machineKey ... decryptionKey="AutoGenerate,IsolateApps" decryption="AES" /> </system.web> </configuration>
Se queste modifiche riguardano un'applicazione che è in cluster, ovviamente la chiave di decriptazione va fissata in maniera tale che sia uguale su tutti i nodi e non autogenerata ed isolata.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Definire la durata dell'output cache in ASP.NET Core 7
Abilitare automaticamente Dependabot in tutti i repository di una organizzazione su GitHub
Gestire tipi complessi in query string grazie a IParsable in ASP.NET Core 7.0
Sfruttare l'output cache di ASP.NET Core 7 con i controller
Impostare il forward degli header in un sito ASP.NET Core dietro a un reverse proxy
Gestire dati sensibili nella configurazione in ASP.NET Core
Definire le impostazioni di cache a livello di controller in ASP.NET Core 7
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Sfruttare i tag nell'output cache di ASP.NET Core 7
Migrare un progetto ASP.NET Core da .NET 6 a .NET 7
Migliorare la scalabilità di ASP.NET Core 7 grazie all'output cache
I più letti di oggi
- Usare le variabili per personalizzare gli stili CSS
- Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
- Utilizzare gli asynchronous stream in Entity Framework Core 3
- Le novità di Entity Framework (Core) 7
- Gestire condizioni complesse in JavaScript
- Sottoscrizione agli eventi sul contenitore in JavaScript
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!