2009-07-18 8 views
6

Ich verwende VSTS 2008 + .Net 2.0 + C#. Und ich führe Code-Analyse nach Build durch. Ich habe die folgende verwirrende Sicherheitswarnung erhalten. Hier ist die Warnung und verwandte Code, irgendwelche Ideen, was ist falsch? Wenn es Sicherheitswarnung gibt, wie man es repariert?Was bedeutet diese Sicherheitswarnung (.Net Prozessklasse)?

System.Diagnostics.Process myProcess = new System.Diagnostics.Process(); 
myProcess.StartInfo.FileName = "IExplore.exe"; 
myProcess.StartInfo.Arguments = @"default.html"; 
myProcess.StartInfo.Verb = "runas"; 
myProcess.Start(); 

Warnung: CA2122: Microsoft.Security: 'TestHtml()' ruft in 'Process.Start()', die eine Linkdemand hat. Durch diesen Aufruf wird 'Process.Start()' indirekt dem Benutzercode ausgesetzt. Überprüfen Sie den folgenden Aufrufstapel, der eine Möglichkeit zur Umgehung des Sicherheitsschutzes verfügbar machen kann:

Antwort

11

Ihre Methode ruft Foo auf, das in einen Process.Start aufruft, der durch eine Verbindungsanforderung für Full Trust geschützt ist. Um das Problem zu vermeiden, über das FxCop Sie warnt, sollten Sie Ihrer Methode eine Link-Anforderung oder eine vollständige Anforderung für dieselben Berechtigungen hinzufügen.

Sie können das Problem beheben, indem

[PermissionSetAttribute(SecurityAction.LinkDemand, Name="FullTrust")] 

Siehe http://msdn.microsoft.com/en-us/library/970x52db.aspx

+0

Dank Ihrer Methode hinzufügen, aber Ihr Code hat Fehler zu bauen. Fehler Der Name "True" existiert im aktuellen Kontext nicht. Irgendwelche Ideen? Ich verwende .Net 2.0 und .Net 2.0 unterstützt es nicht? – George2

+0

Hallo Blowdart, ich habe ein paar neue Ideen und ich denke, es ist kein Sicherheitsloch. Angenommen, die Methode Foo ruft TestHtml und TestHtml Aufrufe Process.Start auf. Selbst wenn TestHtml nicht mit LinkDemand aktiviert ist, sice Process.Start mit LinkDemand aktiviert ist, prüft es immer die Berechtigung von TestHtml (TestHtml ist sofortiger Aufrufer). Selbst wenn Foo nicht genug Berechtigungen hat, wird der Aufruf von TestHtml zu Process.Start fehlschlagen. Also, ich denke keine Sicherheitsprobleme. Irgendwelche Kommentare? – George2

+1

@George, nur jetzt raten, aber es wäre besser, die Sicherheitsanforderungen so früh wie möglich zu überprüfen, wenn TestHtml einen Anwendungsstatus vor dem Scheitern ändern würde. – sisve

1
+0

Dank Kb, die Dokumente, die Sie empfohlen haben, sind sehr hilfreich. Ich möchte bestätigen, ob mein Verständnis korrekt ist. Ich denke, die Ursache ist Prozess.Start benötigt Link-Nachfrage (Berechtigungsprüfung für unmittelbare Aufrufer), aber die Methode TestHtml ich implementiert keine Prüfung für sofortige Aufrufer, so gibt es eine Sicherheitslücke, die der unmittelbare Aufrufer von TestHtml möglicherweise nicht genug haben Erlaubnis, ist das richtiges Verständnis? – George2

+1

@ George2: Wie ich es verstehe, sind Sie richtig. Process.Start hat eine Sicherheitsprüfung deklariert. Der Aufrufer muss die gleiche Sicherheitsprüfung deklarieren oder sicherstellen, dass die Sicherheit nicht verletzt wird (und dann die Prüfung ignorieren). –

+0

Danke Kb, ich habe ein paar neue Ideen und ich denke, es ist kein Sicherheitsloch. Angenommen, die Methode Foo ruft TestHtml und TestHtml Aufrufe Process.Start auf. Selbst wenn TestHtml nicht mit LinkDemand aktiviert ist, sice Process.Start mit LinkDemand aktiviert ist, prüft es immer die Berechtigung von TestHtml (TestHtml ist sofortiger Aufrufer). Selbst wenn Foo nicht genug Berechtigungen hat, wird der Aufruf von TestHtml zu Process.Start fehlschlagen. Also, ich denke keine Sicherheitsprobleme. Irgendwelche Kommentare? – George2