ActiveX не работает должным образом с настройками безопасности по умолчанию - PullRequest
1 голос
/ 29 октября 2009

Я написал элемент управления ActiveX на C # и заставил его работать с помощью команды regasm, и он работает нормально, пока уровень безопасности установлен на низком уровне. Затем в качестве следующего шага я сделал установщик .cab (ICD). - Загрузчик компонентов Интернета), и подписали мой .cab-файл и ActiveX .dll-файл тестовым сертификатом. когда я открываю html-страницу из своего браузера, установочные части работают нормально с настройками безопасности IE по умолчанию, но в конце кажется, что ничего не установлено и вместо ActiveX отображается красный крестик. Кроме того, я исследовал папку «Загрузить программные файлы» в каталоге Windows, в столбце состояния отображается слово «неизвестно». пока он «установлен» для всех остальных activeX. в чем может быть проблема. Более того, если я использую команду regasm, чтобы зарегистрировать сборку, она работает нормально, и я подписал ActiveX, но все же мне нужно переместить панель безопасности на низкое значение в настройках браузера? почему так? тогда какова цель подписания? Я использовал RegisterServer=yes в моем .inf файле

Пожалуйста, дайте мне знать, если кто-то уже прошел эту проблему?

Ответы [ 2 ]

3 голосов
/ 29 октября 2009

Чтобы работать в IE, вам также необходимо реализовать IObjectSafety, чтобы IE знал, что безопасно вызывать ненадежного абонента и / или с ненадежными данными. (Если это действительно безопасно, то есть)

Лично я делал это только на C ++ и ATL, а не на C #, но вот пост в блоге, который, похоже, поможет вам достичь этого в C #.

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

Причина этого заключается в том, что сценарии злых людей могут использовать ваш объект, чтобы обойти обычную защиту, предлагаемую IE, поэтому ваш объект ActiveX должен защищать себя от ненадежных страниц.

Когда вы подписываете такси, вы говорите пользователю, что кабина, которую он загружает, это та, которую, по его мнению, он загружает, т.е. Если они доверяют вам как издателю, то они могут полагать, что ActiveXObject не сделает ничего плохого сам по себе или в сочетании с другим кодом, которому они доверяют.

Когда вы реализуете IObjectSafety, вернуть INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA, вы говорите IE, что этот объект не может быть использован кем-либо еще злонамеренно, и поэтому его безопасно запускать вместе с кодом, которому пользователь явно не доверяет.

1 голос
/ 05 января 2012

Для меня решение выше не работает. Мне нужно было зарегистрировать также TLB

с: regasm MyDll.DLL / tlb

...