SafeCtl.exe implementa IObjectSafety en control ActiveX

Seleccione idioma Seleccione idioma
Id. de artículo: 164119 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

El ejemplo SafeCtl.exe muestra cómo modificar un control ActiveX basada en MFC para indicar quién publicó el código y si un control ha sido alterado. El ejemplo puede ayudar a identificar si el control es seguro para secuencias de comandos y para la inicialización.

Más información

El archivo siguiente está disponible para descargarlo del Centro de descarga de Microsoft:
SafeCtl.exe
Para obtener información adicional acerca de cómo descargar los archivos de soporte técnico de Microsoft, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
119591Cómo obtener Archivos de soporte técnico de Microsoft desde los servicios en línea
Microsoft exploró este archivo en busca de virus. con el software de detección de virus más reciente disponible en la fecha de publicación. Asimismo, el archivo se almacenó en servidores seguros que ayudan a prevenir que se hagan cambios no autorizados.

En Internet Explorer 3.0 y versiones posteriores, los usuarios pueden agregar código en el formulario de controles ActiveX a sus páginas Web. La etiqueta <object> se utiliza para especificar un control. Después de crea una instancia del control, sus atributos se pueden establecer a través de interfaces de persistencia del control. Por ejemplo, para cada etiqueta <param> que Internet Explorer se encuentra en el contexto de una etiqueta <object> al analizar una página HTML, Internet Explorer pasa una bolsa de propiedades a través del control correspondienteinterfaz IPersistPropertyBag . Además, se puede personalizar el comportamiento de un control mediante el uso de secuencias de comandos incrustados en la página que ejecutan los métodos y modificar las propiedades expuestas a través interfaz de automatización del control de la.

Tecnología de firma de código de Authenticode podrán final para identificar quién publicó el código y comprobar que nadie ha manipulado ese código desde que se firmó. No garantiza que el código es seguro cuando sus propiedades se inicializan con valores que no son de confianza o cuando su modelo de automatización depende de secuencias de comandos que no son de confianza. Para evitar tal seguridad posible hazards, la configuración predeterminada de seguridad de Internet Explorer, que es accesible a través de la ficha seguridad de las Opciones de Internet Explorer propiedad hoja, requieren que un control registrarse como implementación de las categorías de componente adecuado o que el control implementa la interfaz IObjectSafety . El ejemplo ilustra ambas.

Antes de que establece las propiedades de un control incrustado en una página HTML, Internet Explorer solicita el control IObjectSafety . Si admite, Internet Explorer, a continuación, llama al SetInterfaceSafetyOptions método en esta interfaz, pasando el valor INTERFACESAFE_FOR_UNTRUSTED_DATA, así como el identificador de interfaz (IID) de una interfaz de persistencia. En páginas HTML en la actualidad, donde propiedades tienden inicializarse a través de la etiqueta de <param> el IID es IID_IPersistPropertyBag. Se proporciona el IID para situaciones en que desee ser proteger la seguridad en algunas interfaces pero no en otros y, en este ejemplo no es importante. La implementación de ejemplo comprueba que la interfaz es compatible. Si el control no puede hacer ningún daño al sistema del cliente independientemente de los datos con el que puede inicializarse a través de esa interfaz de persistencia y se admite esa interfaz de persistencia, implementación del control de la IObjectSafety::SetInterfaceSafetyOptions método debe devolver S_OK. En caso contrario, se debe devolver E_FAIL.

Antes de permitir las secuencias de comandos que están incrustados en la página se ejecute, Internet Explorer llama de forma similar a través del control IObjectSafety:: SetInterfaceSafetyOptions método pero en su lugar se pasa el valor INTERFACESAFE_FOR_UNTRUSTED_CALLER y el IID de algunas secuencias de comandos de interfaz, que suele ser IID_IDispatch. El control debe devolver S_OK o E_FAIL adecuadamente.

Si el control no admite IObjectSafety , Internet Explorer utiliza el Administrador de categorías de componente para ver si el control implementa la categoría "seguros para inicialización" CATID_SafeForInitializing y la categoría "seguros para secuencias de comandos", CATID_SafeForScripting, respectivamente.

Si el control no admite IObjectSafety y no registró como implementación de las categorías de componente apropiado y si el nivel de seguridad de Internet Explorer está establecido en alto, el valor predeterminado, Internet Explorer no inicializará las propiedades del control, ni se ejecutará las secuencias de comandos incrustados en la página. En este escenario, los usuarios finales aparecerá un cuadro de diálogo que contiene el texto siguiente:
Evitado posibles infracción de seguridad
Esta página contiene contenido activo que no es completamente seguro mostrar. Para proteger el equipo, este contenido no aparecerá en pantalla.
Lo siguiente es una lista de instrucciones que se toman del artículo de Paul Johns "firma y marcado controles ActiveX:"
  • El control no manipula el sistema de archivos.
  • El control no manipula el registro (excepto para registrar y anular el registro propio).
  • El control no overindex matrices ni manipular memoria incorrectamente.
  • El control valida (y corrige) todas las entradas, incluidos inicialización, los parámetros de método y funciones de conjunto de propiedades.
  • El control no uso incorrecto de los datos que está suministrado por el usuario o que trata dicho usuario.
  • El control se ha probado en una variedad de escenarios.
Para obtener información adicional, visite el siguiente sitio Web de Microsoft:
Firma y marca los controles ActiveX
http://msdn2.microsoft.com/en-us/library/ms974305.aspx
Si el autor de un control ha comprobado que se han cumplido los criterios anteriores así como cualquier otro que consideren de, deben considerar admitir ambos IObjectSafety y registrar su control como la implementación de las categorías de componente apropiado. Para obtener una lista de las ventajas y desventajas de cada uno de estos métodos, consulte la sección correspondiente en artículo de Paul Johns "firma y marca los controles ActiveX.

Para compilar

Generar el ejemplo requiere Microsoft Visual C++ 5.0 o Microsoft Visual C++ 6.0. Después de extraer los archivos del archivo de almacenamiento, cargue el proyecto Safectl.mdp en Microsoft Developer Studio y generar el proyecto. El proceso de generación debería registrar el control propiamente dicho.

Advertencia Antes de modificar el ejemplo mediante los dos símbolos de preprocesador que figuran más adelante en esta sección, tendrá que eliminar del registro el control si tiene ya ha creado o registrado en el equipo. Para ello, ejecute regsvr32.exe con el modificador /u para el control. También puede agregar una entrada de herramienta personalizada en Developer Studio, que permite realizar esto para el proyecto actual. En el menú Herramientas , haga clic en Personalizar y, a continuación, haga clic en la ficha Herramientas crear una nueva entrada con la siguiente información:
                Name: &Un-register ActiveX Control
             Command: e:\Program Files\DevStudio\SharedIDE\BIN\REGSVR32.EXE
           Arguments: /u /v "$(TargetPath)"
   Initial Directory: $(TargetDir)
				
en este momento, puede utilizar la entrada de "herramientas o Un-registrar controles ActiveX" para anular el registro del control antes de agregar o quitar las definiciones de preprocesador específicas de ejemplo.

Para crear el control de modo que registra como implementación de la "seguros para inicialización" y el "seguros para secuencias de comandos" categorías de componente, siga estos pasos:
  1. En el menú proyecto , haga clic en configuración .
  2. Haga clic en la ficha de C++ y defina la siguiente definición de preprocesador:
    L_USE_COMCAT
  3. Haga clic en Aceptar para cerrar el cuadro de diálogo configuración y, a continuación, vuelva a generar el control.
Para generar el control para que implementa en su lugar IObjectSafety , siga los pasos anteriores, pero reemplazar L_USE_COMCAT L_IMPL_OBJECTSAFETY.

También es válido para definir dos símbolos de preprocesador. Observe que estos símbolos son específicos de este proyecto. De forma predeterminada, la configuración de generación del proyecto define dos símbolos de preprocesador.

Para ejecutar

Después el control de ejemplo se ha generado y se ha registrado correctamente, inicie Internet Explorer y, a continuación, abra la página Safectl.htm, que se incluye con el ejemplo.

Si el control se ha configurado para registrarse como seguros o implementar IObjectSafety , debe leer el título de controles "Seguro para inicializar!" Al hacer clic en el control, debería recibir el mensaje siguiente:
Debe ser seguro para secuencias de comandos.
Si Internet Explorer está configurado para su configuración de seguridad mayor, no se ejecuta la secuencia de comandos asociado y recibirá el mensaje siguiente:
NO seguro para inicialización!


Nota Si genera y probar distintas configuraciones de este ejemplo, asegúrese de que actualiza la página Web en el explorador. Si no actualiza la página, que esté utilizando la versión en caché del control en lugar de la compilación más reciente.

Referencias

Para obtener más información acerca de la API de seguridad, consulte la seguridad referencia de API en la documentación en pantalla del SDK de ActiveX.

Para obtener más información acerca de firma de código, consulte "Firma con Microsoft Authenticode Technology" en la documentación en pantalla del SDK de ActiveX.

Para obtener más información acerca de categorías de componentes, vea el tema "Categorías de componentes" en la documentación en pantalla del SDK de ActiveX.

Para obtener más información sobre cómo implementar un modelo de objetos componentes (COM) de la interfaz en MFC, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
141277Cómo reemplazar una interfaz en una aplicación MFC mediante Visual C++
Para obtener información detallada acerca de cómo desarrollar un control ActiveX y cómo implementarlo en el Web, visite el siguiente sitio Web:
Fundamentos de controles ActiveX MFC
http://msdn.microsoft.com/en-us/library/ms968497.aspx

Propiedades

Id. de artículo: 164119 - Última revisión: jueves, 26 de abril de 2007 - Versión: 5.4
La información de este artículo se refiere a:
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 3.0
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 6.0
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional
  • Microsoft Visual C++ 6.0 Enterprise
  • Microsoft Visual C++ 6.0 Professional
Palabras clave: 
kbmt kbdownload kbfile kbinfo kbsample KB164119 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 164119

Enviar comentarios

 

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