簡體   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