dimanche 23 décembre 2007

Hébergement et Medium Trust

Un petit retour d'expérience sur l'hébergement Medium Trust

Un changement d'hébergeur pour TalentExpo puis une mise en ligne de Bestperf cet été m'ont appris deux/trois choses à anticiper lorsque l'on choisit un hébergeur ayant une politique de sécurité de type Medium Trust, c'est à dire la bonne majorité des hébergeurs en mode mutualisé.

Ce choix peut être structurant sur votre architecture ou votre code, comme nous allons le voir.
Mais d'abord quelques points simples pour éviter les problèmes:

  1. D'abord se renseigner sur la politique de l'hébergeur,
  2. Lui demander le fichier web_mediumtrust.config qu'il utilise pour le tester dans votre environnement, sinon utiliser celui par défaut.
    C'est l'occasion de voir si votre futur hébergeur est transparent et réactif, ce qui est primordial par la suite.
  3. Le déposer sous %windir%\Microsoft.Net\Framework\{version}\Config
  4. Mettre à jour votre fichier web.config:
  5. Vérifier que votre site fonctionne avec cette nouvelle politique de sécurité (plutot que d'essayer vainement de faire changer votre hébergeur...). Par défaut, votre environnement est en full trust.

Voici les deux points majeurs que j'ai pu rencontrer et qui ont été impactant sur mes sites:

Côté Web (Asp.Net 2.0)
Le problème principal est l'utilisation de la sérialisation/désérialisation binaire qui lève une exception de sécurité, voir ce post pour plus de détail.
Il est préférable d'opter pour une sérialisation xml dans ce cas.

ReflectionPermission est restreint aux membres publiques. L'accès aux membres privés est interdite. C'est pour cela que la sérialisation xml est possible et non la sérialisation binaire qui sérialise également les membres privés.

Pour en savoir plus sur l'utilisation du Medium trust, lire la page Msdn.

On peut, entre autre, y trouver la liste suivante:

OleDbPermission : is not available. This means you cannot use the ADO.NET
managed OLE DB data provider to access databases. However, you can use the managed SQL Server provider to access SQL Server databases.


EventLogPermission is not available. This means you cannot access the Windows event log.


RegistryPermission is not available. This means you cannot access the registry.


WebPermission is restricted. This means your application can only communicate with an address or range of addresses that you define in the element.


FileIOPermission is restricted. This means you can only access files in your application's virtual directory hierarchy. Your application is granted Read, Write, Append, and PathDiscovery permissions for your application's virtual directory hierarchy.


Côté Base de donnée, MySql dans mon cas

N'ayant pas le droit d'utiliser la sérialisation binaire côté serveur, l'utilisation de type LOB est de fait interdite dans votre base. Cela peut être impactant si vous souhaitez par exemple sauvegarder des fichiers en binaire (une galerie photos par exemple), et peut nécessiter de rester sur un format fichier.


Par contre, l'utilisation de LOB reste autorisée (et même conseillée pour rester standard .Net) pour les tables de personnalizations si vous utilisez des WebParts ou le Profile, car la sérialisation est cette fois prise en charge par le framework .Net. Ainsi dans mon implémentation MySql de ces providers, CodeFx.MySqlProviders, on retrouve bien le type LongBlob dans les tables aspnet_Profile et aspnet_personalization* bien que ce framework tourne en medium trust.


Third Party API


Le fait d'utiliser du medium trust va peut être également vous interdire l'utilisation de certaines API externes tels que Flickr (pour l'upload de fichiers). Les Api Google ont elles-aussi mis un peu de temps afin d'être compatibles Medium trust.

Pour les assembly Open source, il sera peut être nécessaire de les recompiler avec l'attribut

[assembly: AllowPartiallyTrustedCallers()]

et une signature forte pour pouvoir les utiliser, ce qui est vrai également pour vos propres assemblies sous peine d'avoir une erreur du type partially trusted caller.


Ce sont donc autant de points à tester avant de partir sur une solution.

Aucun commentaire:


Laurent Morisseau, auteur de ce blog, pour me contacter