SafeCtl.exe implementa IObjectSafety no controle ActiveX

Traduções deste artigo Traduções deste artigo
ID do artigo: 164119 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

O exemplo SafeCtl.exe demonstra como modificar um controle ActiveX com base em MFC para indicar quem publicou o código e se um controle ter sido violado. O exemplo pode ajudar a identificar se o controle é seguro para script e para inicialização.

Mais Informações

O seguinte arquivo está disponível para download no Centro de download da Microsoft:
SafeCtl.exe
Para obter mais informações sobre como baixar os arquivos de suporte da Microsoft, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
119591Como obter arquivos de suporte da Microsoft de serviços on-line
Microsoft examinou esse arquivo em busca de vírus. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o arquivo foi publicado. O arquivo é armazenado em servidores com segurança avançada que ajudam a evitar qualquer alteração não autorizada no arquivo.

No Internet Explorer 3.0 e versões posteriores, os usuários podem adicionar código na forma de controles ActiveX para suas páginas da Web. A marca <object> é usada para especificar um controle. Depois que uma instância do controle é criada, seus atributos podem ser definidos através de interfaces de persistência do controle. Por exemplo, para cada marca <param> que Internet Explorer encontrar no contexto de uma marca <object> ao analisar uma página HTML, Internet Explorer passa um conjunto de propriedades por meio do controle correspondenteinterface IPersistPropertyBag . Além disso, o comportamento de um controle pode ser personalizado através do uso de scripts incorporadas na página que executar os métodos e modificar as propriedades expostas por meio interface de automação do controle de.

Assinatura tecnologia de código Authenticode permite aos usuários finais para identificar quem publicou o código e verifique se que ninguém violados esse código desde que foi assinado. Ele não garante que o código é seguro quando suas propriedades são inicializadas com valores não confiáveis ou quando seu modelo de automação é orientado por scripts não confiáveis. Para evitar tal segurança potencial hazards, as configurações de segurança de Internet Explorer padrão, que são acessíveis pela guia segurança do Internet Explorer Opções propriedade folha, exigem que um controle registrou como implementar as categorias de componente apropriado ou que o controle implementa a interface IObjectSafety . O exemplo ilustra ambas.

Antes de ele define as propriedades de um controle incorporado em uma página HTML, o Internet Explorer consultará o controle para IObjectSafety . Se houver suporte, Internet Explorer chama o SetInterfaceSafetyOptions método nesta interface, passando o valor INTERFACESAFE_FOR_UNTRUSTED_DATA, bem como o identificador de interface (IID) de uma interface de persistência. Em páginas HTML hoje em dia, onde propriedades tendem a ser inicializado por meio da marca <param>, a IID é IID_IPersistPropertyBag. A IID é fornecida para situações em que você pode querer ser proteger a segurança no algumas interfaces mas não em outros e neste exemplo não é importante. A implementação de exemplo verifica se há suporte para a interface. Se o controle pode fazer danos ao sistema do cliente, independentemente dos dados com o qual pode ser inicializado por meio dessa interface de persistência e a interface de persistência é suportada, a implementação do controle damétodo IObjectSafety::SetInterfaceSafetyOptions deve retornar S_OK. Caso contrário, E_FAIL deve ser retornado.

Antes de permitir que os scripts que são incorporados na página para ser executado, Internet Explorer da mesma forma chama por meio do controle IObjectSafety:: SetInterfaceSafetyOptions método mas em vez disso, passa o valor INTERFACESAFE_FOR_UNTRUSTED_CALLER e a IID de alguns scripts de interface, que é normalmente IID_IDispatch. O controle deve retornar E_FAIL ou S_OK adequadamente.

Se o controle não dá suporte a IObjectSafety , Internet Explorer usará o Gerenciador de categorias de componente para ver se o controle implementa a categoria "seguros para inicialização", CATID_SafeForInitializing e a categoria "seguros para script", CATID_SafeForScripting, respectivamente.

Se o controle não dá suporte a IObjectSafety e não tiver se auto-registrado como implementar as categorias de componente apropriado, e se o nível de segurança do Internet Explorer está definido como alto, o padrão, o Internet Explorer não inicializará as propriedades do controle nem executará os scripts que incorporada na página. Nessa situação, os usuários finais receber uma caixa de diálogo que contém o texto a seguir:
Violação de segurança potencial evitada
Esta página contém conteúdo ativo que não é seguro verifiably para exibir. Para proteger seu computador, esse conteúdo não será exibido.
O seguinte é uma lista das diretrizes são tiradas da artigo de Paul paulos, "assinatura e marcando os controles ActiveX:"
  • O controle não manipular o sistema de arquivos.
  • O controle não manipular o registro (exceto para registrar e cancelar o registro próprio).
  • O controle não overindex matrizes ou caso contrário, manipular memória incorretamente.
  • O controle valida (e corrige) todas as entradas, incluindo a inicialização, os parâmetros de método e funções set da propriedade.
  • O controle não uso indevido de quaisquer dados que é fornecido pelo usuário ou que trata desse usuário.
  • O controle foi testado em uma variedade de cenários.
Para obter informações adicionais, visite o seguinte site:
Assinatura e marcando os controles ActiveX
http://msdn2.microsoft.com/en-us/library/ms974305.aspx
Se o autor de um controle verificou que os critérios acima foram atendidos juntamente com quaisquer outros que pode pensar, eles considere oferecendo suporte a dois IObjectSafety e registrar seu controle como implementar as categorias de componente apropriado. Para obter uma lista das vantagens e desvantagens de cada um desses métodos, reveja a seção correspondente no artigo de Paul paulos, "Assinatura e marcando os controles ActiveX."

Para compilar

Criar o exemplo requer Microsoft Visual C++ 5.0 ou Microsoft Visual C++ 6.0. Após extrair os arquivos do arquivo morto, carregar o projeto Safectl.mdp no Microsoft Developer Studio e criar o projeto. Como parte do processo de compilação, deve registrar o controle propriamente dito.

Aviso Antes de você modificar o exemplo usando os dois símbolos de pré-processamento listados posteriormente nesta seção, você deve cancelar o registro o controle se ele já tem sido criado ou registrado no computador. Para fazer isso, execute o Regsvr32.exe com a opção /u para o seu controle. Você também pode adicionar uma entrada de ferramenta personalizada Developer Studio fará isso para o projeto atual. No menu Ferramentas , clique em Personalizar e clique na guia e Ferramentas criar uma nova entrada com as seguintes informações:
                Name: &Un-register ActiveX Control
             Command: e:\Program Files\DevStudio\SharedIDE\BIN\REGSVR32.EXE
           Arguments: /u /v "$(TargetPath)"
   Initial Directory: $(TargetDir)
				
neste ponto, você pode usar a entrada "ferramentas/cancele o registro controle ActiveX" para cancelar o registro de controle antes de adicionar ou remover as definições de pré-processamento exemplo específicas.

Para criar o controle para que ele se registra como implementar o "seguro para inicialização" e o "seguro para script" categorias de componente, execute estas etapas:
  1. No menu Project , clique em configurações .
  2. Clique na guia C++ e defina a seguinte definição pré-processador:
    L_USE_COMCAT
  3. Clique em OK para fechar a caixa de diálogo configurações e, em seguida, recriar o controle.
Para criar o controle para que ele implementa IObjectSafety em vez disso, siga as etapas anteriores, mas substitua L_USE_COMCAT L_IMPL_OBJECTSAFETY.

Ele também é válido para definir os dois símbolos de pré-processamento. Observe que esses símbolos são específicos para este projeto. Por padrão, as configurações de compilação do projeto definem os dois símbolos de pré-processamento.

Para executar

Depois que o controle de exemplo foi criado e foi registrado com êxito, inicie o Internet Explorer e, em seguida, abra a página Safectl.htm, incluído com o exemplo.

Se o controle tiver sido configurado para se registrar como seguro ou implementar IObjectSafety , a legenda de controles deve ler "Seguro para inicialização!" Quando você clicar no controle, você deverá receber a seguinte mensagem:
Deve ser seguro para script!
Se Internet Explorer é configurado para sua configuração de segurança mais alta, o script associado não é executado e você receber a seguinte mensagem:
NÃO seguro para inicialização!


Observação Se você estiver criando e testando configurações diferentes de neste exemplo, certifique-se de que você atualizar a página da Web no navegador. Se você não atualizar a página, você pode ser usando a versão em cache do controle em vez da compilação mais recente.

Referências

Para obter mais informações sobre as APIs de segurança, consulte a segurança Referência API na documentação on-line do SDK do ActiveX.

Para obter mais informações sobre assinatura de código, consulte "Assinatura com Authenticode tecnologia Microsoft" na documentação on-line do SDK do ActiveX.

Para obter mais informações sobre categorias de componentes, consulte o tópico "Categorias de componentes" na documentação on-line do SDK do ActiveX.

Para obter mais informações sobre como implementar um COM (Component Object Model) da interface no MFC, clique no seguinte número de artigo para ler o artigo na Base de dados de Conhecimento da Microsoft:
141277Como substituir uma interface em um aplicativo MFC usando o Visual C++
Para informações detalhadas sobre como desenvolver um controle ActiveX e como implantá-lo na Web, visite o seguinte site:
ABCs de controles ActiveX MFC
http://msdn.microsoft.com/en-us/library/ms968497.aspx

Propriedades

ID do artigo: 164119 - Última revisão: quinta-feira, 26 de abril de 2007 - Revisão: 5.4
A informação contida neste artigo aplica-se a:
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 3.0
  • Microsoft Internet Explorer 4.0 Edição de 128 Bits
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 6.0
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Professional Edition
Palavras-chave: 
kbmt kbdownload kbfile kbinfo kbsample KB164119 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 164119

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com