【问题标题】:Change Internet Explorer settings programmatically?以编程方式更改 Internet Explorer 设置?
【发布时间】:2011-04-30 08:04:52
【问题描述】:

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

  1. 转到Tools -> Internet Options -> Security
  2. 选择Security 标签
  3. 点击Custom Level按钮
  4. Miscellaneous 部分将Display mixed content 更改为Enable

【问题讨论】:

  • 您的意思是,在一个受信任的、本地安装的、具有管理员权限的 C# 应用程序中?
  • 是的。以管理员权限运行的受信任的本地应用程序
  • 而且,当然,这将是一个“临时更改”......在达到其目的后总是撤消?未经用户知情同意,我不会去“调整”用户浏览器设置,尤其是对安全敏感的设置。
  • 大量的演讲作为回应。这可能是用于测试目的的未发布代码。想要做这些事情是有正当理由的。

标签: c# .net windows internet-explorer


【解决方案1】:

做到这一点的“作弊”方法是改变价值

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet 设置\区域\0\1609 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet 设置\区域\1\1609 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet 设置\区域\2\1609 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet 设置\区域\3\1609 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet 设置\区域\4\1609

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

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

【讨论】:

  • 可以在here 找到所有注册表值的列表和每个值的描述。另请注意,每个区域代表一个不同的安全区域Zone 3Internet Zone
【解决方案2】:

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

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

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

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

【讨论】:

  • 高飞。作为一个只花了一个小时交叉眼睛并希望我得到所有这些设置的人 想要他们......我想说..即使经过这么多年(现在是 2018 年)安全似乎没有办法监控/管理这些设置。这是犯罪。我应该能够运行 config-ie.exe 并且我自己和 都可以放心,这些设置都是应有的。
【解决方案3】:

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

现在回到如何以编程方式更改设置的问题。 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 上成功测试上述代码后,我决定回到 EricLaw 的原始建议:修改 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\*\1001 直接因为这是微软推荐的。参见,例如 How to strengthen the security settings for the Local Machine zone in Internet ExplorerEnhanced Browsing Security

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 设置在子键下 - HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings;
    • 请记住,对注册表的修改不会立即生效。注册表中的设置一般在系统启动时读取一次并缓存。这不是更改系统设置的正确方法。
    • 这取决于应用程序和密钥。操作系统使用的某些注册键将要求您再次启动操作系统,因为操作系统已读取它们一次并缓存了它们的值。某些应用程序使用的注册键只需要重新启动应用程序。注册表只是一个通用的存储区域,数据的使用方式取决于数据的使用者(操作系统、应用程序等)。但显然,通过直接修改其 reg 键来更改某些其他应用程序设置并不是一个好方法。
    • 天啊,是的,这显然取决于应用程序。但我们不是在谈论应用程序配置设置。我们谈论的是 Internet Explorer 的系统范围的安全设置。关键是,这不是修改这些设置的正确方法。你发现了一个无证的黑客,万岁。这个问题是那些典型的无证黑客。在注册表中搜索所需的设置并不是在 Windows 中查找新功能的正确方法。阅读Raymond Chen's blog了解详情。
    • 我同意你的看法。不要这样做..但很高兴知道所有这些东西。我永远不会在我的应用程序中这样做。使用未记录的方式这样做是不好的,只会导致问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多