2010-08-09 5 views
0

Si enableViewStateMAC est définie sur true, ASP.NET génère un code de hachage pour les données ViewState et le comparer à l'hashcode stocké dans la valeur affichée. Qu'est-ce qui empêche un attaquant de définir le hachage en fonction des valeurs de formulaire modifiées?ViewState enableViewStateMAC

Répondre

3

Le hachage généré est basée sur les valeurs de la forme et sur une clé privée connue par serveur (voir Salt on wikipedia). Donc, vous ne pouvez pas générer un hachage valide alors que vous n'avez pas la chaîne de sel.

Vous pouvez examiner les sources ASP.NET de mise en œuvre Mono et de voir à la classe System.Web.UI.ObjectStateFormatter, méthode Deserialize():

if (EnableMac) { 
    data = MachineKeySectionUtils.VerifyDecrypt (Section, data); 
else { 
    data = MachineKeySectionUtils.Decrypt (Section, data); 
} 

et à la classe System.Web.Util.MachineKeySectionUtils, méthode VerifyDecrypt():

using (KeyedHashAlgorithm kha = GetValidationAlgorithm (section)) { 
    kha.Key = GetValidationKey (section); 
    // ... 
} 

GetValidationKey() retourne le sel pour signer et vérifier le hachage ...