繁体   English   中英

以编程方式更改 Internet Explorer 设置?

[英]Change Internet Explorer settings programmatically?

知道如何使用 C# 执行以下操作吗?

  1. 转到Tools -> Internet Options -> Security
  2. Select Security选项卡
  3. 单击Custom Level按钮
  4. Miscellaneous部分将Display mixed content更改为Enable

这样做的“作弊”方法是更改值

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 Settings\Zones\3\1609 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\4\1609

其中 0-4 是区域标识符,值为 0 表示允许,1 表示提示,3 表示阻止。 请记住,如果您的代码在除您自己之外的任何人的机器上执行此操作,您可能会发现您的代码被作为恶意软件被阻止。

执行此操作的“正确”方法是使用 API 创建 IInternetZoneManager 并调用SetZoneActionPolicy来调整您要调整的区域中 URLACTION_HTML_MIXED_CONTENT 的设置。

您不应该“以编程方式”执行此操作。 这就是为什么没有 API 的原因。 只有用户可以更改他们的安全设置,并且他们使用您已经发现的内置界面来执行此操作。

可怜的 IE 团队一直在加班加点试图加强他们浏览器的安全性。 他们不会投入这样的东西,这会在几秒钟内使他们的所有努力付诸东流。
回想一下,即使选择了此选项,也会出现一个确认对话框 您如何建议以编程方式“点击”它? (嗯,再想一想,别告诉我。这可能是你要问的下一个问题。)

放弃尝试以编程方式执行此操作,并要求用户自己执行此操作。 提供完整的帮助文件或其他文档,说明您要求他们进行此更改的原因、如果他们不选择进行此更改,哪些功能将不可用,以及进行此类更改可能存在哪些安全风险。 当然,还有关于如何进行更改的具体说明。

或者,更好的是,重新设计您的应用程序,使其不需要在系统范围内修改 IE 的安全设置。 很难想象一个合理的案例。 更好的解决方案可能是要求用户将您的网站添加到他们的“受信任的网站”。 请记住,默认情况下,本地页面的安全设置与远程页面不同。

也不要忘记组策略。 大多数(如果不是全部)IE 设置也可以在组策略中指定。 根据IE 安全页面与 Internet 选项安全页面的本地组策略设置,组策略设置会覆盖用户定义的设置。 因此,在我的家用 PC(没有域控制器的情况下)上,我可以选择通过本地组策略编辑器或 Internet 选项来定义 IE 设置。 例如,如果我运行 gpedit.msc 打开本地组策略编辑器,select 计算机配置\Windows 组件\Internet Explorer\Internet 控制面板\安全页面\Internet 区域将“显示混合内容”设置更改为“启用”,然后 select“在下拉框中启用”,单击应用,然后在 IE 中打开 Internet 区域的安全设置 - 我将看到“显示混合内容”更改为启用,并且选择被禁用,因为它被策略覆盖。 有关支持的策略的完整列表,请从http://www.microsoft.com/en-us/download/details.aspx?id=25250下载 WindowsServer2012andWindows8GroupPolicySettings.xlsx

现在回到如何以编程方式更改设置的问题。 EricLaw 正确建议使用 IInternetZoneManager 中的 SetZoneActionPolicy。 但是很难找到从 C# 调用它的样本。 我最终将http://www.pinvoke.net/default.aspx/Interfaces.IInternetZoneManager复制到我的代码中,然后执行以下操作:

//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);

我还尝试以编程方式更改组策略。 我使用了https://bitbucket.org/MartinEden/local-policy的库,然后:

//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();

在使用 IE 11 在 Win7 SP1 上成功测试上述代码后,我决定 go 回到 EricLaw 的原始建议:直接修改 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\*\1001,因为这就是 Microsoft推荐。 例如,请参阅如何加强 Internet Explorer 中本地计算机区域的安全设置增强的浏览安全

我不确定,但我认为您可以在“注册表”中找到所有这些设置。 您需要找到合适的密钥。 要改变这些价值观,你需要拥有适当的权利。 注册表可以从.net代码访问

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM