2010-10-04 41 views
0

travail I a écrit le code suivant pour tester la CAS:Question sur le paradigme du code d'accès de sécurité (CAS)

[SecurityPermission(SecurityAction.Demand,Flags=SecurityPermissionFlag.Execution)] 
    static void Main(string[] args) 
    { 
     Console.WriteLine("hello, world!"); 
    } 

Dans la configuration .NET 2.0, j'utilise le nom fort de l'assemblage ci-dessus pour créer un groupe de codes et donnez au groupe Nothing ensemble d'autorisations. L'assemblage n'a donc pas pu démarrer comme prévu.

Mais je remarquai que si je retire l'attribut suivant:

[SecurityPermission(SecurityAction.Demand,Flags=SecurityPermissionFlag.Execution)] 

Le programme n'a pas démarré encore. Alors quel est le point de ce soi-disant sécurité déclarative avec attribut?

J'ai lu plusieurs tutoriels sur CAS, ils utilisent la sécurité impérative/déclarative pour utiliser le CAS. Mais à partir de l'exemple ci-dessus, cela ne semble pas nécessaire.

Si je délibérément écrire du code sans sécurité impérative/déclarative et ne fournissez aucune preuve pour mon assemblage, CAS serait aveugle pour appliquer toute politique de sécurité? Ou est-ce que je ne comprends pas comment CAS devrait être utilisé?

Merci.

Répondre

1

Une demande d'autorisation CAS entraîne la vérification de chaque trame de pile d'appels au-dessus de la méthode effectuant la demande. Étant donné que votre assembly n'exécute aucun code pour appeler la méthode Main, la demande n'est pas évaluée par rapport à votre code.

Il s'agit du refus d'autorisations d'exécution via une stratégie qui empêche l'exécution de votre assembly. L'autorisation est en cours d'évaluation par le CLR lui-même lorsqu'il exécute votre code d'assemblage. Il n'est pas nécessaire d'ajouter votre propre demande d'autorisation. Pour revenir un peu en arrière et voir comment les demandes CAS (déclaratives ou impératives) sont censées être utilisées, considérez que les autorisations protègent l'accès aux ressources. Tout code permettant d'accéder à une ressource (par exemple: le système de fichiers) qui ne serait pas accessible au code géré devrait fournir une autorisation (par exemple: FileIOPermission) qui peut être utilisée pour contrôler l'accès à cette ressource. Le code permettant l'accès à la ressource est également chargé de faire des demandes pour cette autorisation avant de permettre l'accès à la ressource. La plupart des développeurs qui écrivent du code managé n'auront jamais besoin de créer une autorisation CAS ou de demander explicitement une autorisation CAS car ils accèderont généralement aux ressources exposées (et protégées) par la bibliothèque de classes de base .NET ou par d'autres Microsoft ou bibliothèques tierces.