Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

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

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

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

- Intégration Yammer et SharePoint Online (Office 365), étape 1 … par Le blog de Patrick [MVP SharePoint] le 06-12-2013, 17:37

- [Dynamics CRM] Ajouter les dossiers de CRM au dossier Favoris d’Outlook par Christine Dubois le 06-10-2013, 15:50

- Visual Studio 2013 par Etienne Margraff le 06-04-2013, 10:26

- Configurer la collation SQL Server pour SharePoint par Blog de Jérémy Jeanson le 06-03-2013, 19:48

- Etendre le Team Web Access de TFS 2012 – Step 1: Création du plugin par Philippe Didiergeorges Aka Philess le 06-03-2013, 07:30

- Livre Blanc : Développer des applications NUI par Fathi Bellahcene le 06-01-2013, 11:35

- [Dynamics CRM 2011] Copier une vue d'entité par Christine Dubois le 05-29-2013, 13:20

- [Conf’SharePoint 2013] Mes présentations… par Le blog de Patrick [MVP SharePoint] le 05-28-2013, 09:04

- [wpdev] Storage bug in MediaLibrary.SavePicture par Kévin Gosse le 05-26-2013, 19:08

- VMMap en mode instrumentation sur système 64bit : attention à la plateforme cible du build .NET par CoqBlog le 05-25-2013, 22:25