asp.net problème de cryptage viewstate
j'essaie d'activer le cryptage viewstate Toujours comme mesure de sécurité pour mon ASP.NET 3.5 site Web hébergé à L'IIS6. Nous avons viewstate éteint, mais voir encore quelques "controlstate" dans cette chaîne. Dans un environnement de test, je suis capable de simplement définir ce qui suit sur le web.config et je ne peux plus m'en base64 decoder les viewstate semi-texte en clair:
<pages enableViewState="false" enableViewStateMac="true" viewStateEncryptionMode="Always">
j'ai même ajouté ce qui suit (genereated par clé machine generater) à la machine.config et encore crypte le viewstate très bien sur mon serveur de test:
<machineKey validationKey="002..." decryptionKey="D90E..." validation="SHA1" decryption="AES" />
mon environnement non-test ne semble pas prendre en compte les changements ci-dessus car je peux toujours base64 décoder le viewstate en texte clair avec les paramètres ci-dessus. Je suis toujours là quand je fais des changements.
Quelques infos sur mon serveur de test:
- Batterie de serveurs Web/d'équilibrage de Charge (mais un seul serveur pour le test pour le moment)
- Session Sql Etat (machinekey en machine.config a d'abord été nécessaire pour cela)
- de la machine.config: déploiement de détail="true"
est-ce que quelqu'un peut suggérer où chercher des paramètres supplémentaires qui pourraient interférer avec asp.net un cryptage viewstate?
EDIT: maintenant sur mon serveur de test iis Je ne peux pas défaire le paramètre viewStateEncryptionMode car il est encrypting le viewstate même quand je l'ai mis à "jamais" et aucun de mes autres sites Web semblent prendre une emprise sur ce paramètre. Où puis-je regarder pour voir où cette propriété est remplacée? Y a-t-il un cache où ce paramètre est stocké qui doit être effacé en plus de ce qui serait fait quand iisreset/stop service www/Machine tactile.config?
EDIT FINAL: après des jours d'étude des fichiers de configuration, j'ai abandonné et implémenté ceci via le code. J'avais déjà un module de sécurité qui s'attachait aux événements de la page donc dans Page_Load j'ai ajouté: Page.RegisterRequiresViewStateEncryption ();
j'aimerais vraiment savoir ce qui l'empêchait d'obtenir ramassé sur IIS6 immédiatement. Quand j'exécute cassini localement si je mets le mode viewstateencryption à "toujours"via le noeud de pages je le verrais immédiatement encoder l'état de la vue et rendre le champ caché supplémentaire avec id="__VIEWSTATEENCRYPTED". Quand je l'ai mis à "jamais", je voyais immédiatement le cryptage désactivé. Si je fais exactement la même modification le site web sur mon site IIS6 hébergé, il n'aurait aucun effet immédiatement, mais si je laisse le cadre de rester là, il finirait par s'installer. Je voudrais arrêter / démarrer le service www, réinitialiser iis, effacer ASPNET cache temporaire mais je ne sais pas quoi d'autre à essayer? J'espère que ce post peut POURRIR pendant un certain temps et que quelqu'un dans l'avenir sera le même comportement que j'ai expérimenté et nous pouvons comprendre cela!
3 réponses
je sais que cela fait longtemps que vous n'avez pas posté ceci, mais avez-vous envisagé de faire votre propre implémentation de PageStatePersister? Pagetatepersister est le component responsable du formatage des données de ViewState et ControlState intégrées dans votre page. Si la sécurité est votre principale préoccupation, vous pouvez utiliser les algorithmes de cryptage que vous souhaitez pour vous assurer que vos données restent privées. En se basant sur votre configuration, on dirait que vous êtes dans un environnement plutôt compétent, donc évidemment load-test premier. Il est également intéressant de mentionner que je n'ai aucune idée ou expérience de l'implication de MVC dans ViewState lorsqu'il est incorporé dans un "classique" ASP.NET site WebForms.
Bonne chance.
B
Web.les paramètres de page de configuration ne s'appliquent pas aux pré-compilés ASP.Net application avec option updatable désactivée. Cela fait longtemps, mais mon serveur de test que j'ai probablement déployé avec option updable désactivée ... leçon apprise.
voir MSDN
similaire Question j'ai Demandé, même problème.
a mon avis, c'est le fait que load balanced Web farm est la source de la confusion. Vous avez déclaré que seulement "un seul serveur [est] prêt à être testé en ce moment", mais tous les symptômes que vous éprouvez ressemblent exactement à ce qui se produirait si plusieurs serveurs dans la ferme web étaient en cours d'exécution, mais vous n'avez créé que le web.config et machine.les modifications de configuration sur un serveur. Lorsque vous accédez au site Web avec votre navigateur, vous accédez parfois à un serveur configuré d'une manière ou d'une autre. d'un autre serveur qui est configuré d'une autre manière.