2009-07-18 12 views
6

Estoy usando VSTS 2008 + .Net 2.0 + C#. Y estoy ejecutando Code Analysis después de la compilación. Recibí la siguiente advertencia de seguridad confusa. Aquí está la advertencia y el código relacionado, ¿alguna idea de lo que está mal? Si hay una advertencia de seguridad, ¿cómo solucionarlo?¿Qué significa esta advertencia de seguridad (clase de proceso .Net)?

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

advertencia: CA2122: Microsoft.Security: 'TestHtml()' pone en 'Process.Start()' que tiene una LinkDemand. Al hacer esta llamada, 'Process.Start()' se expone indirectamente al código de usuario. Revise la siguiente pila de llamadas que podría exponer una forma de eludir la protección de seguridad:

Respuesta

11

Su método llama a Foo que llama a un Process.Start que está protegido por una demanda de enlace para Full Trust. Para evitar el problema sobre el que FxCop le advierte, debe agregar una demanda de enlace o una demanda completa de los mismos permisos para su método.

lo puede solucionar añadiendo a su método de

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

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

+0

Gracias, pero tiene su código de error construir. Error El nombre 'Verdadero' no existe en el contexto actual. ¿Algunas ideas? Estoy usando .Net 2.0 y .Net 2.0 no es compatible? – George2

+0

Hola blowdart, tengo algunas ideas nuevas y creo que no es un problema de seguridad. Supongamos que el método Foo llama a las llamadas TestHtml y TestHtml Process.Start. Incluso si TestHtml no está habilitado con LinkDemand, sice Process.Start está habilitado con LinkDemand, siempre comprobará el permiso de TestHtml (TestHtml es el llamador inmediato). Entonces, incluso si Foo no tiene suficiente permiso, la llamada de TestHtml a Process.Start fallará. Entonces, creo que no hay problemas de seguridad. ¿Algún comentario? – George2

+1

@George, solo estoy adivinando ahora, pero sería mejor verificar los requisitos de seguridad tan pronto como sea posible, si TestHtml cambiara cualquier estado de aplicación antes de fallar. – sisve

1
+0

Gracias Kb, los documentos que recomienda son muy útiles. Quiero confirmar si mi entendimiento es correcto. Creo que la causa raíz es Process.Start necesita enlaces de demanda (comprobación de permisos para llamadas inmediatas), pero el método TestHtml I implementado no verifica el permiso para llamadas inmediatas, por lo que hay un agujero de seguridad que la persona que llama inmediatamente de TestHtml puede no tener suficiente permiso, ¿es eso una comprensión correcta? – George2

+1

@ George2: Según tengo entendido, estás en lo cierto. Process.Start ha declarado un control de seguridad. La persona que llama debe declarar la misma verificación de seguridad o asegurarse de que no se viole la seguridad (y luego ignorar el cheque). –

+0

Gracias Kb, tengo algunas ideas nuevas y creo que no es un problema de seguridad. Supongamos que el método Foo llama a las llamadas TestHtml y TestHtml Process.Start. Incluso si TestHtml no está habilitado con LinkDemand, sice Process.Start está habilitado con LinkDemand, siempre comprobará el permiso de TestHtml (TestHtml es el llamador inmediato). Entonces, incluso si Foo no tiene suficiente permiso, la llamada de TestHtml a Process.Start fallará. Entonces, creo que no hay problemas de seguridad. ¿Algún comentario? – George2