Non, ce n'est pas du tout en sécurité. Type.GetType va charger une assemblée si elle n'a pas été chargé avant:
GetType provoque le chargement de l'assemblée spécifié dans typeName.
Alors, quel est le problème avec le chargement d'une assemblée? Hormis l'aide de la mémoire supplémentaire comme Daniel souligne .NET assemblées peuvent exécuter du code lorsqu'ils chargent, même si cette fonctionnalité n'est pas exposé à la normale compilateurs comme C# et VB.NET. Ceux-ci sont appelés module initialiseurs.
Le module de l'initialiseur d'exécution de la méthode à, ou un peu avant, le premier accès à tous les types, des méthodes ou des données définies dans le module
Juste le fait que vous êtes le chargement d'une assemblée et d'un examen de ses types est suffisant pour obtenir le module d'initialiseur à exécuter.
Quelqu'un avec un habilement écrite de l'assemblée (à dire en utilisant ilasm et de l'écriture MSIL brut) peut exécuter du code tout en obtenant l'assemblée chargée et que vous examinant les types. C'est pourquoi nous avons de l'Assemblée.ReflectionOnlyLoad, donc nous pouvons charger l'assembly dans un non-exécutable de l'environnement.
J'ai fait un peu plus de réflexion sur ce et de la pensée d'un peu plus de cas.
Considérez que votre Pool d'Applications est réglé pour fonctionner en 64 bits. Maintenant, imaginez que votre attaquant utilise le service AJAX pour tenter de charger un assembly qui est strictement pour architecture x86 uniquement. Par exemple, il y en a un dans mon GAC appelé Microsoft.SqlServer.Réplication x86 seulement, il n'est pas AMD64 contre-partie. Si je demande à votre service de charger cette assemblée, vous devez obtenir un BadImageFormatException
. En fonction de ce que la garde des clauses que vous avez en place autour de chargement de l'assemblée, les exceptions non gérées pourrait totalement faire baisser votre pool d'applications.