c # - Ændre Internet Explorer-indstillinger programmatisk?

Indlæg af Hanne Mølgaard Plasc

Problem



Enhver ide hvordan gør jeg følgende ved hjælp af C #?



  1. Gå til Tools -> Internet Options -> Security

  2. Vælg fanen Security

  3. Klik på knappen Custom Level

  4. I sektionen Miscellaneous ændres Display mixed content til Enable


Bedste reference


Den 'snyde' måde at gøre dette på er at ændre værdien



  HKEY\_CURRENT\_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet
  Indstillinger \ Zones \ 0 \ 1609
  HKEY\_CURRENT\_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet
  Indstillinger \ Zones \ 1 \ 1609
  HKEY\_CURRENT\_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet
  Indstillinger \ Zones \ 2 \ 1609
  HKEY\_CURRENT\_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet
  Indstillinger \ Zones \ 3 \ 1609
  HKEY\_CURRENT\_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet
  Indstillinger \ Zones \ 4 \ 1609



Hvor 0-4 er Zone-identifikatorer, og værdien er 0 til Tillad, 1 til Prompt og 3 for Blokering. Husk, at hvis din kode gør dette på alles maskine, men din egen, vil du sandsynligvis finde din kode blokeret som malware.


Den rigtige måde at gøre dette på er at bruge API'erne til at oprette en IInternetZoneManager og ring SetZoneActionPolicy for at justere indstillingerne for URLACTION\_HTML\_MIXED\_CONTENT i de zoner, du vil justere. [9]

Andre referencer 1


Du skal ikke gøre dette 'programmatisk'. Det er derfor, at der ikke findes en API til det. Kun brugeren kan ændre deres sikkerhedsindstillinger, og de gør det ved hjælp af den indbyggede grænseflade, som du allerede har opdaget .


Det fattige IE-team har arbejdet overarbejde og forsøger at stramme op på deres browser. De 'vil ikke smide i noget som dette, der ville ophæve alle deres bestræbelser på få sekunder
Husk, at selv når denne valgmulighed er valgt, er der en bekræftelsesdialog præsenteret. Hvordan foreslår du at 'klikke' det programmatisk? (Hmm, ved anden tankegang, fortæl mig ikke. Det er nok det næste spørgsmål du ll spørg.) [10]


Giv op med at forsøge at gøre dette programmelt og bede brugeren om at gøre det selv. Giv en komplet hjælpefil eller anden dokumentation, der forklarer hvorfor du beder om, at de foretager denne ændring, hvilke funktioner vil være utilgængelige, hvis de ikke vælger at foretage denne ændring, og hvad de mulige sikkerhedsrisici ved at foretage en sådan ændring er. Og , selvfølgelig, specifikke instruktioner om hvordan ændringen er lavet.


Eller endnu bedre redesign din app, så det ikke kræver en system-wide ændring af IEs sikkerhedsindstillinger. Det er svært at forestille sig et legitimt tilfælde for dette. En bedre løsning kan bede brugeren om at tilføje dit websted til deres 'betroede websteder'. Husk at lokale sider har standard sikkerhedsindstillinger end eksterne sider som standard.

Andre referencer 2


Glem også gruppepolitikkerne. De fleste (hvis ikke alle) IE-indstillinger kan også angives i Gruppepolitikker.
I henhold til lokal gruppepolicyindstilling for IE-sikkerhedssiden vs. internet-optionssikkerhedsside
Gruppepolitiske indstillinger tilsidesætter brugerdefinerede indstillinger.
Så på min hjemme-pc (fungerer uden domænecontroller) har jeg mulighed for at definere IE-indstillinger enten via Local Group Policy Editor eller via Internet Options. Hvis jeg for eksempel kører gpedit.msc for at åbne lokal gruppepolicyeditor, skal du vælge
Computer Configuration \ Windows Components \ Internet Explorer \ Internet Kontrolpanel \ Sikkerheds Side \ Internet Zone
skift indstillingen 'Vis blandet indhold' til 'Aktiveret', vælg derefter 'Aktiver' i rullemenuen, klik på Anvend,
Åbn derefter Sikkerhedsindstillinger for Internet Zone i IE - Jeg vil se, at 'Vis blandet indhold' ændres til Aktiver og
udvælgelsen er deaktiveret, fordi den er tilsidesat af politik.
For hele listen over understøttede politikker download WindowsServer2012andWindows8GroupPolicySettings.xlsx
fra
http://www.microsoft.com/en-us/download/details.aspx?id=25250[11][12]


Nu tilbage til spørgsmålet, hvordan man ændrer indstillingerne programmatisk.
EricLaw foreslog korrekt at bruge SetZoneActionPolicy fra IInternetZoneManager.
Men det er svært at finde prøver for at kalde det fra C #.
Jeg endte med at kopiere
http://www.pinvoke.net/default.aspx/Interfaces.IInternetZoneManager
ind i min kode og derefter gøre: [13]


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


Jeg har også forsøgt at ændre gruppepolitikken programmatisk.
Jeg brugte bibliotek fra
https://bitbucket.org/MartinEden/local-policy
og derefter: [14]


//This will disable "Download signed ActiveX controls" computer policy for Internet Zone (zone #3)
const string keyPath = @"SOFTWAREPoliciesMicrosoftWindowsCurrentVersionInternet Settingsones3";
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();


Efter at have testet koden ovenfor på Win7 SP1 med IE 11, besluttede jeg at gå tilbage til det oprindelige forslag fra EricLaw: modificere
HKEY\_CURRENT\_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internetindstillinger \ Zones \ * \ 1001
direkte fordi dette er hvad Microsoft anbefaler. Se for eksempel hvordan du styrker sikkerhedsindstillingerne for lokalmaskinsonen i Internet Explorer eller forbedret browsersikkerhed [15] [16]

Andre referencer 3


Jeg er ikke sikker, men jeg tror, ​​du kan finde alle disse indstillinger i 'registreringsdatabasen'. Du skal finde ud af den relevante nøgle. Og for at ændre disse værdier skal du have de rette rettigheder. Registry kan fås fra .net kode