Domanda

Ho scritto un controllo ActiveX in C # e l'ho fatto funzionare usando il comando regasm, e funziona bene fino a quando il livello di sicurezza è impostato su basso .. Quindi come passaggio successivo ho creato un programma di installazione .cab (ICD - Downloader di componenti Internet) e ho firmato il mio file CAB e il file DLL ActiveX con un certificato di prova. quando colpisco la pagina html dal mio browser le parti di installazione funzionano bene con le impostazioni di sicurezza predefinite di IE, ma alla fine sembra che non sia installato nulla e una croce rossa sia mostrata al posto di ActiveX. Inoltre ho esplorato la cartella Download Program Files nella directory di Windows, nella colonna dello stato mostra la parola "sconosciuto". mentre è " installato " per tutti gli altri activeX. quale potrebbe essere il problema Inoltre, se uso il comando regasm per registrare l'assembly, funziona bene e ho firmato ActiveX, ma devo comunque spostare la barra di sicurezza in basso nelle impostazioni del mio browser? perché è così? allora qual è lo scopo della firma? Ho usato RegisterServer = yes nel mio file .inf

Per favore fatemi sapere, se qualcuno ha già affrontato questo problema?

È stato utile?

Soluzione

Per funzionare in IE, devi anche implementare IObjectSafety in modo che IE sappia che è sicuro essere chiamato da un chiamante non attendibile e / o con dati non attendibili. (Se è effettivamente sicuro, cioè)

Personalmente, l'ho fatto solo in C ++ & amp; ATL, non C #, ma ecco un post sul blog che sembra aiutarti a raggiungere questo obiettivo in C #.

http://blog.devstone.com/aaron/2007 /06/12/ImplementingIObjectSafetyInNETMarkingClassesSafeForScripting.aspx

La ragione di ciò è che gli script di persone malvagie possono usare il tuo oggetto per bypassare la normale sicurezza offerta da IE, quindi il tuo oggetto ActiveX deve difendersi dalle pagine non attendibili.

Quando firmi un taxi, stai dicendo all'utente che il taxi che sta scaricando è quello che pensa di scaricare, ovvero che qualcuno malizioso non ha sostituito il tuo taxi con uno pericoloso. Se si fidano di te come editore, possono fidarsi che ActiveXObject non farà nulla di male da solo o in combinazione con altri codici di cui si fidano.

Quando si implementa IObjectSafety, per restituire INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA, stai dicendo a IE che l'oggetto non può essere usato maliziosamente da nessun altro ed è quindi sicuro eseguirlo insieme al codice di cui l'utente non si fida esplicitamente.

Altri suggerimenti

Per me la soluzione sopra non funziona. Avevo bisogno di registrare anche il tlb

con: regasm MyDll.DLL / tlb

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top