2017-06-12 3 views
0

Je ne sais pas comment résoudre mon problème FxCop.Ne pas exposer indirectement les méthodes avec des demandes de liaison

Ceci est ma fonction intéressé

public void WriteLine(int eventNumber, string message, params object[] args) 
    { 
     try 
     { 
      rwl.WaitOne(); 
      try 
      { 

         sw.WriteLine(DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss", CultureInfo.CurrentCulture) + "\t\t" + eventNumber.ToString(CultureInfo.CurrentCulture) + "\t" + System.Reflection.Assembly.GetCallingAssembly().GetName().Name + "\t" + Process.GetCurrentProcess().Id.ToString(CultureInfo.CurrentCulture) + "\t" + tID + " \t " + message, args);     
      } 
      catch (Exception ex) 
      { 
       throw new ArgumentException("Cannot write to file " + ex.Message); 
      } 
      finally 
      { 
       rwl.ReleaseMutex(); 
      } 
     } 
     catch (ApplicationException) 
     { 
     } 
    } 

Ceci est l'erreur: CriticalError, Certitude 33, pour DoNotIndirectlyExposeMethodsWithLinkDemands Aide: http://msdn.microsoft.com/library/ms182303(VS.100).aspx
Info: « Ne pas envelopper une méthode protégée par un LinkDemand avec une LinkDemand vérifie les autorisations de l'appelant immédiat plutôt que de vérifier les autorisations de tous les appelants dans la méthode qui n'effectue pas de contrôle de sécurité. la pile d'appels. Dans ce cas, les autorisations de la méthode wrapper seront vérifiées. Si l'emballage méthode n'a pas, lui-même, vérifiez les autorisations des appelants plus élevés dans la pile d'appel, le code malveillant peut être en mesure pour exécuter la fonction enveloppée même si elle ne dispose pas la permission de le faire. »

+0

Qu'est-ce que 'rwl'? Vérifiez la source de 'rwl.ReleaseMutex' et' rwl.WaitOne' (et peut-être 'sw.WriteLine') pour leurs attributs de sécurité.Vous devez appliquer ces attributs à votre méthode' WriteLine' Je ne peux pas expliquer le mécanisme dans détails, mais de cette façon, les appelants de votre méthode sont contrôlés, ce que veulent ces attributs 'LinkDemand' Vous devrez faire cela tout le long de la pile d'appels –

Répondre

0

est-rwl a [Mutex] [1]? Si c'est le cas, la classe est décorée avec un [HostProtectionAttribute] [2] qui crée une demande de lien pour HostProtectionPermission, ce qui est vraisemblablement ce qui cause la règle CA2122 à déclencher

Cela dit, FxCop a spécifiquement exclu HostProtectionPermission de la considération dans la règle CA2122 depuis au moins FxCop 10.0 (parce que ce n'est pas vraiment un problème de sécurité), donc il semble un peu étrange que vous voyez cette violation de règle. Si vous utilisez une version plus ancienne de FxCop et que vous êtes sûr que c'est un HostProtectionAttribute qui cause le problème, il semblerait tout à fait sûr de supprimer la violation. Sinon, pourriez-vous fournir plus de détails (version de FxCop, version de Visual Studio, version du framework cible, types sw et rwl) afin que la cause de la violation soit plus facilement identifiée?

+0

Ceci est le problème: appelle dans 'Processus .GetCurrentProcess() » qui a un LinkDemand. en faisant cet appel, « Process.GetCurrentProcess() » est indirectement exposé au code utilisateur. Vérifiez la pile d'appel suivant qui pourrait exposer un moyen de contourner la protection de la sécurité –

+0

Désolé, Je n'ai pas fait défiler assez loin vers la droite pour voir l'utilisation du 'Processus 'Il y a plusieurs options pour traiter cela, mais le L'option dépend de quelques éléments. Quelle version du framework .NET ciblez-vous? En outre, votre assembly est-il décoré avec l'un des attributs suivants: 'AllowPartiallyTrustedCallers',' SecurityRules', 'SecurityCritical' ou' SecurityTransparent'? Si l'un de ces attributs est présent, savez-vous pourquoi ils ont été ajoutés? –