2009-07-18 9 views
6

Sto usando VSTS 2008 + .Net 2.0 + C#. E sto eseguendo l'analisi del codice dopo la compilazione. Ho ricevuto il seguente avviso di sicurezza confuso. Ecco l'avvertimento e il codice correlato, qualche idea, cosa c'è che non va? Se c'è un avviso di sicurezza, come risolverlo?cosa significa questo avviso di sicurezza (. .net Classe di processo)?

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

avvertimento: CA2122: Microsoft.Security: 'TestHtml()' chiama in 'Process.Start()' che ha un LinkDemand. Effettuando questa chiamata, "Process.Start()" è indirettamente esposto al codice utente. Rivedere il seguente stack di chiamate che potrebbe esporre un modo per aggirare la protezione di sicurezza:

risposta

11

Il metodo chiama Foo che chiama in un Process.Start che è protetto da una richiesta di collegamento per il trust completo . Per evitare il problema di FxCop, dovresti aggiungere una richiesta di collegamento o una richiesta completa per le stesse autorizzazioni al tuo metodo.

È possibile risolvere il problema aggiungendo al tuo metodo

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

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

+0

Grazie, ma il codice è costruire errore. Errore Il nome "True" non esiste nel contesto corrente. Qualche idea? Sto usando .Net 2.0 e .Net 2.0 non lo supporta? – George2

+0

Ciao blowdart, ho alcune nuove idee e penso che non sia un buco di sicurezza. Supponiamo che il metodo Foo chiama TestHtml e TestHtml chiama Process.Start. Anche se TestHtml non è abilitato con LinkDemand, sice Process.Start è abilitato con LinkDemand, controllerà sempre l'autorizzazione di TestHtml (TestHtml è il chiamante immediato). Quindi, anche se Foo non ha abbastanza permessi, la chiamata da TestHtml a Process.Start fallirà. Quindi, penso che non ci siano problemi di sicurezza. Qualche commento? – George2

+1

@George, solo indovinando ora, ma sarebbe meglio controllare i requisiti di sicurezza il prima possibile, se TestHtml cambierebbe qualsiasi stato di applicazione prima di fallire. – sisve

1
+0

Grazie Kb, i documenti che hai consigliato sono molto utili. Voglio confermare se la mia comprensione è corretta. Penso che la causa principale sia Process.Start ha bisogno della richiesta di collegamento (controllo dei permessi per il chiamante immediato), ma il metodo TestHtml che ho implementato non controlla l'autorizzazione per il chiamante immediato, quindi c'è un buco di sicurezza che il chiamante immediato di TestHtml potrebbe non avere abbastanza permesso, è quella comprensione corretta? – George2

+1

@ George2: A quanto ho capito, hai ragione. Process.Start ha dichiarato un controllo di sicurezza. Il chiamante deve dichiarare lo stesso controllo di sicurezza o assicurarsi che la sicurezza non sia violata (e quindi ignorare il controllo). –

+0

Grazie Kb, ho alcune nuove idee e penso che non sia un buco di sicurezza. Supponiamo che il metodo Foo chiama TestHtml e TestHtml chiama Process.Start. Anche se TestHtml non è abilitato con LinkDemand, sice Process.Start è abilitato con LinkDemand, controllerà sempre l'autorizzazione di TestHtml (TestHtml è il chiamante immediato). Quindi, anche se Foo non ha abbastanza permessi, la chiamata da TestHtml a Process.Start fallirà. Quindi, penso che non ci siano problemi di sicurezza. Qualche commento? – George2

Problemi correlati