Pergunta

Eu escrevi um controle ActiveX em C# e o fiz funcionar usando o comando regasm, e funciona bem desde que o nível de segurança seja definido como baixo. Então, como uma próxima etapa, fiz um instalador .cab (ICD - componente da Internet Downloader) e assinaram meu arquivo .cab e o arquivo .dll ActiveX .dll com um certificado de teste. Quando clico na página HTML no meu navegador, as peças de instalação funcionam bem com as configurações de segurança padrão do IE, mas no final parece que nada está instalado e uma cruz vermelha é mostrada no local do ActiveX. Além disso, explorei a pasta de arquivos de programas de download no diretório do Windows, na coluna de status, ele está mostrando a palavra "desconhecida". Embora esteja "instalado" para todos os outros ActiveX. O que pode ser o problema. Além disso, se eu usar o comando regasm para registrar a montagem, ele funciona bem, e assinei o ActiveX, mas ainda tenho que mover a barra de segurança para baixo na configuração do meu navegador? Por que é assim? Então, qual é o objetivo de assinar? Eu tenho usado RegisterServer=yes No meu arquivo .inf

Por favor, me avise, se alguém já passou por esse problema?

Foi útil?

Solução

Para ser executado no IE, você também precisa implementar o IoBjectSafety para que o IE saiba que é seguro ser chamado por um chamador não confiável e/ou com dados não confiáveis. (Se é realmente seguro, é isso)

Pessoalmente, eu só fiz isso em C ++ e ATL, não C#, mas aqui está uma postagem no blog que parece ajudá -lo a conseguir isso em C#.

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

A razão para isso é que os scripts de indivíduos nefastos podem usar seu objeto para ignorar a segurança normal oferecida pelo IE, para que seu objeto ActiveX deve se defender contra as próprias páginas não confiáveis.

Quando você assina um táxi, está dizendo ao usuário que o táxi que eles estão baixando é o que eles acham que estão baixando - ou seja, que algum indivíduo malicioso não substituiu seu táxi por um perigoso. Se eles confiarem em você como editor, podem confiar que o ActiveXObject não fará nada do mal por conta própria, ou em combinação com outro código em que confia.

Quando você implementa o IoBjectSafety, para retornar interfaceSafe_for_untrusted_caller | InterfaceSafe_for_untrusted_data, você está dizendo ao IE que o objeto não pode ser usado maliciosamente por mais ninguém e, portanto, é seguro para executar em conjunto com o código em que o usuário não confia explicitamente.

Outras dicas

Para mim, a solução acima não funciona. Eu precisava registrar também o TLB

com: regasm mydll.dll /tlb

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top