2011-04-30 29 views
7

¿Alguna idea de cómo hago lo siguiente con C#?¿Cambiar la configuración de Internet Explorer programáticamente?

  1. ir a Tools -> Internet Options -> Security
  2. Seleccione la pestaña Security
  3. clic en el botón Custom Level
  4. En el cambio Miscellaneous sección Display mixed content a Enable
+2

¿Quiere decir, desde dentro de una aplicación C# de confianza instalada localmente que tiene derechos de administrador? –

+1

Sí. aplicación local de confianza que se ejecuta con privilegios de administrador – kakopappa

+3

Y, por supuesto, esto sería un "cambio temporal" ... que SIEMPRE se deshace una vez que se ha cumplido su propósito? No iría a "ajustar" la configuración del navegador de los usuarios, especialmente a las de seguridad, sin el consentimiento informado de los usuarios. – corlettk

Respuesta

11

La forma "trampa" de hacer esto es para cambiar el valor

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 0 \ 1609 HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 1 \ 1609 HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 2 \ 1609 HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Configuración \ Zones \ 3 \ 1609 HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 4 \ 1609

Dónde 0-4 son identificadores de zona y el valor es 0 para permitir, a 1 pronta, y del 3 al bloque. Tenga en cuenta que si su código hace esto en la máquina de otra persona que no sea la suya, es probable que encuentre su código bloqueado como malware.

La forma "correcta" de hacerlo es utilizar las API para crear un IInternetZoneManager y llamar al SetZoneActionPolicy para ajustar la configuración de URLACTION_HTML_MIXED_CONTENT en las zonas que desea ajustar.

+1

Se puede encontrar una lista de todos los valores de registro y una descripción para cada uno [aquí] (http://support.microsoft.com/kb/182569). También tenga en cuenta que cada zona representa una _security zone_ distinta. 'Zone 3' es la' Zona de Internet'. – fbonetti

5

No se supone que para hacer esto "mediante programación ". Es por eso que no hay una API para eso. Solo el usuario puede cambiar su configuración de seguridad y lo hace mediante la interfaz integrada que ya ha descubierto.

El pobre equipo de IE ha estado trabajando horas extras tratando de reforzar la seguridad de su navegador. No van a arrojar algo como esto que anularía todos sus esfuerzos en cuestión de segundos.
Recuerde que incluso una vez que se selecciona esta opción, está a confirmation dialog presented. ¿Cómo se propone "hacer clic" en ese programa? (Mmm, pensándolo bien, no me digas. Esa es probablemente la siguiente pregunta que harás)

Olvídate de intentar hacer esto programáticamente y pide al usuario que lo haga por sí mismo. Proporcione un archivo de ayuda completo u otra documentación que explique por qué está solicitando que realicen este cambio, qué características no estarán disponibles si no eligen realizar este cambio y cuáles son los posibles riesgos de seguridad de realizar dicho cambio. Y, por supuesto, instrucciones específicas sobre cómo se realiza el cambio.

O, mejor aún, rediseñe su aplicación para que no requiera un en todo el sistema modificación de la configuración de seguridad de IE. Es difícil imaginar un caso legítimo para esto. Una mejor solución podría ser pedirle al usuario que agregue su sitio a sus "sitios de confianza". Recuerde que las páginas locales tienen diferentes configuraciones de seguridad que las páginas remotas de forma predeterminada.

-1

No estoy seguro, pero creo que puede encontrar todas estas configuraciones en "registro". Necesitas encontrar la clave apropiada. Y para cambiar esos valores, necesita tener los derechos adecuados. Registro se puede acceder desde el código .NET

+0

La configuración se encuentra debajo de las claves secundarias en - HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Configuración de Internet; – Ankur

+0

Recuerde que las modificaciones en el Registro no surten efecto de inmediato. La configuración en el Registro generalmente se lee una vez en el inicio del sistema y se almacena en caché. Esta no es la forma correcta de cambiar la configuración del sistema. –

+0

Depende de la aplicación y las claves. Algunas claves de registro que utiliza el sistema operativo requerirán que inicie el sistema operativo de nuevo, ya que el sistema operativo las ha leído una vez y almacena sus valores en caché. Las claves Reg que son utilizadas por alguna aplicación solo requerirán reiniciar la aplicación. El registro es solo un área de almacenamiento general, la forma en que se usan los datos depende del consumidor de los datos (sistema operativo, aplicaciones, etc.). Pero obviamente no es una buena forma de cambiar alguna otra configuración de aplicación modificando directamente sus claves de registro. – Ankur

0

Además, no olvide las Políticas de grupo. La mayoría (si no todas) las configuraciones de IE también se pueden especificar en las Políticas de grupo. De acuerdo con Local group policy setting for IE security page vs Internet options security page , la configuración de la directiva de grupo anula la configuración definida por el usuario. Por lo tanto, en mi PC hogareña (funciona sin controlador de dominio) tengo la opción de definir la configuración de IE a través del Editor de políticas de grupo local o a través de Opciones de Internet. Por ejemplo, si ejecuto gpedit.msc para abrir el Editor de directivas de grupo local, seleccione Configuración del equipo \ Componentes de Windows \ Internet Explorer \ Panel de control de Internet \ Página de seguridad \ Zona de Internet cambie la configuración "Mostrar contenido mixto" a "Activado", luego seleccione "Habilitar" en el cuadro desplegable, haga clic en Aplicar, y luego abra la Configuración de seguridad para la Zona de Internet en IE - Veré que "Mostrar contenido mixto" cambió a Habilitar y la selección está deshabilitada porque está anulada por Política. Para la lista completa de las políticas apoyadas descargar WindowsServer2012andWindows8GroupPolicySettings.xlsx de http://www.microsoft.com/en-us/download/details.aspx?id=25250

Ahora, de vuelta a la pregunta de cómo cambiar la configuración mediante programación. EricLaw sugirió correctamente el uso de SetZoneActionPolicy desde IInternetZoneManager. Pero es difícil encontrar muestras para llamarlo desde C#. terminé de copiar http://www.pinvoke.net/default.aspx/Interfaces.IInternetZoneManager en mi código y luego hacer:

//This will disable "Download signed ActiveX" (IE setting # 0x1001) for Internet Zone (zone #3) 
IInternetZoneManager izm = Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("7b8a2d95-0ac9-11d1-896c-00c04Fb6bfc4"))) as IInternetZoneManager; 
IntPtr pPolicy = Marshal.AllocHGlobal(4); 
Marshal.Copy(new int[] { 3 }, 0, pPolicy, 1);//3 means "Disable" 
int result = izm.SetZoneActionPolicy((uint)UrlZone.Internet, (uint)0x1001, pPolicy, 4, (uint)UrlZoneReg.CurrentUserKey); 
Marshal.ReleaseComObject(izm); 
Marshal.FreeHGlobal(pPolicy); 

También intentado cambiar la política del grupo mediante programación. que utiliza la biblioteca de https://bitbucket.org/MartinEden/local-policy y luego:

//This will disable "Download signed ActiveX controls" computer policy for Internet Zone (zone #3) 
const string keyPath = @"SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3"; 
var gpo = new LocalPolicy.ComputerGroupPolicyObject(); 
using (var machine = gpo.GetRootRegistryKey(LocalPolicy.GroupPolicySection.Machine)) 
{ 
    using (var terminalServicesKey = machine.CreateSubKey(keyPath)) 
    { 
     terminalServicesKey.SetValue("1001", 3, Microsoft.Win32.RegistryValueKind.DWord); 
    } 
} 
gpo.Save(); 

Después de probar con éxito el código anterior en SP1 Win7 con IE 11 decidí volver a la sugerencia original de EricLaw: modificar HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ * \ 1001 directamente porque esto es lo que Microsoft recomienda. Consulte, por ejemplo, How to strengthen the security settings for the Local Machine zone in Internet Explorer o Enhanced Browsing Security

Cuestiones relacionadas