4

Je lis un livre sur MVC2, et dans la section OutputCache il déclare:OutputCache et Autorisez filtres à MVC3

Avertissement Dans la section précédente « Comment les filtres d'autorisation Interagir avec Caching de sortie, » je lui ai expliqué que [Authorize] a un comportement spécial pour s'assurer que les visiteurs non autorisés ne peuvent pas obtenir des informations sensibles juste parce qu'il est déjà mis en cache. Cependant, à moins que vous spécifiquement l'empêcher, il est toujours possible que la sortie en cache soit livrée à un autre utilisateur autorisé que celui pour lequel il a été généré à l'origine. Une façon d'éviter que serait mettre en œuvre votre contrôle d'accès pour un élément de contenu particulier en tant que filtre d'autorisation (dérivé de AuthorizeAttribute) au lieu de appliquer simplement en ligne logique d'autorisation dans une méthode d'action, parce AuthorizeAttribute sait comment éviter d'être contourné par la sortie . Testez soigneusement pour vous assurer que l'autorisation et la sortie de la mise en cache interagissent de la manière attendue.

Est-ce encore vrai dans MVC3?

Si affirmative, comment prévenir cela? (parce que l'explication dans le livre est trop vague).

Cordialement.

Répondre

4

Je pense que c'est. Lorsque vous utilisez OutPutCache pour mettre en cache des données, ces données sont mises en cache globalement. Tant qu'un utilisateur est autorisé, l'utilisateur obtiendra des données en cache.

Oui, nous avons des options "VaryByParam" pour outputcache, mais cela crée également un nouveau cache pour chaque paramètre passé. ce qui signifie que c'est encore globalement. Par conséquent, si vous souhaitez mettre en cache des données différentes en fonction des utilisateurs, outputcache n'est peut-être pas le bon moyen de le faire. Si les données sont spécifiques à l'utilisateur, la session est le bon choix. C'est ce que vit la session

+0

Super, je vais commencer une prime de toute façon alors peut-être que je peux attraper plus d'explications: D Merci un million. – vtortola

+0

Donc, si j'utilise "OutputCacheAttribute.VaryByHeader = Cookie" il sera sûr en termes d'autorisation? Ce que je veux mettre en cache est la page rendue, car certaines d'entre elles sont grandes et avec beaucoup de logique de génération. – vtortola

+0

c'est une option. mais si l'information est critique, vous ne devriez probablement pas dépendre du cookie, qui est stocké du côté client. – fengd