Share via


Disponibilidad de servicios entre dominios

El uso de para la comunicación entre dominios requiere protección contra los distintos tipos de vulnerabilidad de la seguridad que se pueden utilizar para aprovecharse de las aplicaciones web. La falsificación entre sitios es una clase de acción que se convierte en una amenaza cuando se permiten las llamadas entre dominios. Esta acción implica que un control de Silverlight malintencionado transmite comandos no autorizados a servicios de terceros sin el conocimiento del usuario. Para impedir la falsificación de solicitudes de sitios, Silverlight solo permite la comunicación del sitio de origen de forma predeterminada para todas las solicitudes que no sean de imágenes ni medios. Por ejemplo, un control de Silverlight hospedado en https://contoso.com/mycontrol.aspx solo puede tener acceso a los servicios que se encuentran en el mismo dominio de forma predeterminada (por ejemplo, https://contoso.com/service.svc, pero no un servicio en https://fabrikam.com/service.svc). De esta forma, se impide que un control de Silverlight malintencionado que se encuentre hospedado en el dominio https://contoso.com realice llamadas de operaciones no autorizadas en un servicio hospedado en el dominio https://fabrikam.com.

Para habilitar un control de Silverlight a fin de tener acceso a un servicio en otro dominio, el servicio debe participar explícitamente para permitir el acceso entre dominios. Gracias a esta participación, un servicio indica que un control de Silverlight puede invocar las operaciones que expone con seguridad, sin sufrir consecuencias potencialmente perjudiciales para los datos que el servicio almacena.

Silverlight 3 admite dos mecanismos diferentes para los servicios a fin de participar en el acceso entre dominios:

  • Coloque un archivo clientaccesspolicy.xml en la raíz del dominio en el que está hospedado el servicio para configurar dicho servicio de forma que permita el acceso entre dominios.

  • Coloque un archivo crossdomain.xml válido en la raíz del dominio en el que está hospedado el servicio. El archivo debe marcar el dominio completo como público. Silverlight admite un subconjunto del esquema crossdomain.xml.

Para obtener más información acerca del acceso entre esquemas, vea Restricciones de acceso a redes en Silverlight 2.

Para utilizar un archivo clientaccesspolicy.xml a fin de permitir el acceso entre dominios

  1. Cree un servicio que permita el acceso desde un cliente de Silverlight. Para obtener más información acerca de cómo realizar esta tarea, vea Cómo crear un servicio para clientes de Silverlight.

  2. Crear un archivo clientaccesspolicy.xml que permita tener acceso al servicio. La siguiente configuración permite tener acceso desde cualquier otro dominio a todos los recursos que se encuentran en el dominio actual.

    <?xml version="1.0" encoding="utf-8"?>
    <access-policy>
      <cross-domain-access>
        <policy>
          <allow-from http-request-headers="SOAPAction">
            <domain uri="*"/>
          </allow-from>
          <grant-to>
            <resource path="/" include-subpaths="true"/>
          </grant-to>
        </policy>
      </cross-domain-access>
    </access-policy>
    
  3. Guarde el archivo clientaccesspolicy.xml en la raíz del dominio en el que está hospedado el servicio. Si, por ejemplo, el servicio está hospedado en https://fabrikam.com, el archivo se debe ubicar en https://fabrikam.com/clientaccesspolicy.xml.

  4. El valor válido para el atributo de encabezados es el comodín (“*”), que acepta todos los encabezados que no estén en la lista negra y una lista separada por comas de los encabezados permitidos. Estos encabezados permitidos pueden usar un comodín como sufijo; por ejemplo, “X-CUSTOM-*”.

  5. De forma alternativa, si desea permitir el acceso desde uno de los otros dominios solamente, como https://contoso.com, el archivo clientaccesspolicy.xml debe contener la siguiente configuración.

    <?xml version="1.0" encoding="utf-8"?>
    <access-policy>
      <cross-domain-access>
        <policy>
          <allow-from http-request-headers="SOAPAction ">
            <domain uri="https://contoso.com"/>
          </allow-from>
          <grant-to>
            <resource path="/" include-subpaths="true"/>
          </grant-to>
        </policy>
      </cross-domain-access>
    </access-policy>
    
  6. Compruebe que el acceso está habilitado mediante la invocación del servicio desde el otro dominio.

  7. Nota

    Para permitir el acceso a un servicio HTTPS desde una aplicación HTTP, necesita colocar el elemento <domain uri=”http://*” /> dentro del elemento <allow-from>.

Para usar un archivo crossdomain.xml a fin de permitir el acceso al cruce de dominios.

  1. Cree un servicio que permita el acceso desde un cliente de Silverlight. Para obtener más información acerca de cómo realizar esta tarea, vea Cómo crear un servicio para clientes de Silverlight.

  2. Crear un archivo crossdomain.xml que contenga la siguiente configuración. La configuración del archivo debe permitir el acceso al servicio desde cualquier otro dominio o, de lo contrario Silverlight 3 no lo reconocerá.

    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
    <cross-domain-policy>
      <allow-http-request-headers-from domain="*" headers="SOAPAction,Content-Type"/>
    </cross-domain-policy>
    
  3. Guarde el archivo crossdomain.xml en la raíz del dominio en el que está hospedado el servicio. Si, por ejemplo, el servicio está hospedado en https://fabrikam.com, el archivo se debe ubicar en https://fabrikam.com/crossdomain.xml.

  4. Compruebe que el servicio está habilitado mediante la invocación del servicio desde el otro dominio.

Enviar comentarios sobre este tema a Microsoft.

Copyright © 2009 Microsoft Corporation. Reservados todos los derechos.