Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    View Cyril Durand's profile on LinkedIn

    hit counters

Code Access Security et ASP.net - WebPermission en medium trust.

Code Access Security est un mécanisme qui permet de bloquer certaines méthodes à certaines assemblies en fonction de ses droits, pour en savoir plus, consulter l'article de raptorXP sur le fonctionnement de Code Access Security.

Un site ASP.net est constitué d'assemblies, lorsque IIS exécute un site web il charge ses assemblies, par défaut aucune restriction de sécurité n'est appliqué sur ces assemblies, on dit alors que le site s'exécute en Full trust.

Tout ceci est configuré dans le web.config global, par défaut :

<location allowOverride="true"> <system.web> <securityPolicy> <trustLevel name="Full" policyFile="internal" /> <trustLevel name="High" policyFile="web_hightrust.config" /> <trustLevel name="Medium" policyFile="web_mediumtrust.config" /> <trustLevel name="Low" policyFile="web_lowtrust.config" /> <trustLevel name="Minimal" policyFile="web_minimaltrust.config" /> </securityPolicy> <trust level="Full" originUrl="" /> </system.web> </location>

Dans cette configuration le site web possède tous les droits, il n'y a aucune restriction effectué par .net, la seule restriction se situe au niveau du compte exécutant ASP.net, généralement le compte aspnet.

On modifie rarement ces sécurités lorsque l'on est propriétaire du serveur mais dans le cas d'un hébergement mutualisé, pour des raisons de sécurités le site web est souvent en Medium trust aussi appelé Partial trust.

Le fichier de configuration racine devient alors :

<location allowOverride="false"> <system.web> <securityPolicy> <trustLevel name="Full" policyFile="internal" /> <trustLevel name="High" policyFile="web_hightrust.config" /> <trustLevel name="Medium" policyFile="web_mediumtrust.config" /> <trustLevel name="Low" policyFile="web_lowtrust.config" /> <trustLevel name="Minimal" policyFile="web_minimaltrust.config" /> </securityPolicy> <trust level="Medium" originUrl="" /> </system.web> </location>

Dans le cas de la configuration d'un serveur mutualisé, attention à ne pas oublier le allowOverride="false",  sinon les sites webs pourront se remettre en Full Trust.

Pour savoir ce que le Medium trust implique il faut regarder dans le fichier web_mediumtrust.config, c'est ce fichier qui contient les jeux de permissions. Cet article montre un tableau récapitulant les différentes permissions en fonction des trust level : How To: Use Code Access Security in ASP.NET 2.0.

Voici les principales permissions apporté par .net. Bien sur, si vous avez le courage vous pouvez créer vos propres permissions :

Aa302425.f09thcm01(en-us,MSDN.10)[1]
Source : Using Code Access Security with ASP.NET

 

L'une des permissions les plus pénibles en Medium Trust est la WebPermission. En effet cette permission ne permet pas de faire des requêtes vers d'autres serveurs, il ne vous est alors impossible d'appeler des WebServices, de lire des RSS, ... 

<IPermission class="WebPermission" version="1"> <ConnectAccess> <URI uri="$OriginHost$"/> </ConnectAccess> </IPermission>

Lorsque vous essayez d'accéder à l'extérieur, par exemple un flux RSS, vous tombez alors sur cette erreur :

Stack Trace: [SecurityException: Request for the permission of type 'System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.] System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0 System.Security.CodeAccessPermission.Demand() +59 System.Net.HttpWebRequest..ctor(Uri uri, ServicePoint servicePoint) +166 System.Net.HttpRequestCreator.Create(Uri Uri) +26 System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase) +373 System.Net.WebRequest.Create(Uri requestUri) +28

Si, pour des raisons de sécurité, vous avez configuré votre site en medium trust et vous voulez appeler une seule url bien définit, par exemple l'adresse d'un WebService, vous pouvez créer un nouveau modèle de sécurité se basant sur le medium trust et rajouté une entrée dans le ConnectAccess.

<IPermission class="WebPermission" version="1"> <ConnectAccess> <URI uri="$OriginHost$"/> <URI uri="http://blogs.developpeur.org/cyril/rss.aspx" /> </ConnectAccess> </IPermission>

Si vous voulez autoriser tout un domaine vous pouvez utiliser une expression régulière (j'ai pas trouvé de doc là dessus, si quelqu'un a je suis preneur)

<IPermission class="WebPermission" version="1"> <ConnectAccess> <URI uri="$OriginHost$"/> <URI uri="http://blogs.developpeur.org/.*" /> </ConnectAccess> </IPermission>

Malheureusement, lorsque l'on a un hébergement mutualisé on n'a pas accès à ces fichiers de config, l'hébergeur ne va pas rajouter une entrée pour chaque hébergement. La solution consiste à désactiver cette permission, cela se fait en utilisant l'attribut Unrestrictited="true".

<IPermission class="WebPermission" version="1" Unrestricted="true" />

Avec cette permission ASP.net ne bloquera plus les requêtes vers l'extérieur.


Posted: mercredi 11 juillet 2007 15:45 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- un Pacman en Silverlight 2b2 par Pierrick's Blog le il y a 4 heures et 49 minutes

- Une table -> deux entity types sans colonne discriminante en base, gestion des relations par Matthieu MEZIL le il y a 12 heures et 47 minutes

- ssdl view et TPT par Matthieu MEZIL le 07-05-2008, 02:04

- L'injection SQL n'est PAS un problème QUE pour les développeurs web ! par CoqBlog le 07-05-2008, 01:08

- Un outil pour réaliser des animations WPF basées sur des équations de Bézier par Perspective le 07-04-2008, 21:45

- Sandcastle et CodePlex : le verdict par CoqBlog le 07-04-2008, 20:53

- ssdl view et TPH par Matthieu MEZIL le 07-04-2008, 19:12

- Webcasts sur le Parallel Framework disponibles par Matthieu MEZIL le 07-04-2008, 17:26

- [Silverlight] - Comprendre et Débuter avec Silverlight par Danuz le 07-04-2008, 12:41

- SharePoint : Nouvel article sur l'exportation et Importation de sites SharePoint par Blog Technique de Romelard Fabrice le 07-04-2008, 01:00