El mejor método: Access-Control-Allow-Origin Múltiples Dominios de Origen

Esta pregunta se ha hecho aquí antes y dio una serie de buenas respuestas, principalmente:
Access-Control-Allow-Origin Origen Múltiple De Los Dominios?

Sin embargo parece ser que hay una brecha en la explicación en términos de la aprobación del método que debe ser realizada. La lectura a través de la W3 documentación que tenemos de lo que me parece ser un conflicto de orientación.

En primer lugar vemos la respuesta dada como la derecho manera de hacerlo en una gran cantidad de las respuestas anteriores, que dicta que el servidor host debe dinámicamente echo de regreso a la dada ‘Origen’ si aparece un nuevo ‘lista blanca’.
http://www.w3.org/TR/cors/#resource-implementation

Sin embargo muchas de las respuestas y de los métodos utilizados aluden también a una lista delimitada por espacios que también puede ser utilizado como un método de pasar varios ‘Orígenes’ a permitir. Si echamos un vistazo a otra pieza de W3 documentación en http://www.w3.org/wiki/CORS_Enabled podemos ver un ejemplo de esto en la primera sección de la página como:

 Access-Control-Allow-Origin: http://example.com:8080 http://blah.example.com http://foo.example.com

De estos dos métodos que yo sería igual de feliz a incorparate bien sin embargo hay una gran lista de direcciones Url que se necesita para ser whilelisted y así que quería asegurarse de que yo estoy haciendo esta corrently ronda por primera vez. Si alguien tiene alguna comprensión de los dos métodos mencionados arriba, yo estaría muy agradecido a escuchar la decisión en sus opciones y si no es una guía definitiva para el método recomendado que puede haber perdido.

InformationsquelleAutor JonnyIrving | 2014-08-14

2 Kommentare

  1. 38

    La documentación en esto parece implicar que permite múltiples orígenes con una lista separada por espacios, pero eso no es lo que realmente significa. Esto es lo que yo podría reunir la mayoría de definitivo respuesta a su pregunta: el Access-Control-Allow-Origin encabezado debe ser el mismo valor que la Origin encabezado como el tiempo que quieras para permitirlo.

    La razón no es una lista blanca que se envía de vuelta al cliente es porque técnicamente, el cliente puede enviar una lista separada por espacios de los orígenes, de modo que el servidor puede validar la solicitud. El objetivo de la origen de la lista, a continuación, es debido a que la solicitud podría haber llegado desde múltiples orígenes (es decir. la solicitud fue redirigido a través de dominios). Una suite de prueba hace que sea fácil para observar este comportamiento con diferentes redirigir posibilidades, aunque una lista separada por espacios nunca se genera (por Firefox, al menos).

    Esto es ilustrado en la parte inferior en el primer vinculado documento de W3C proporcionada:

    El Access-Control-Allow-Origin encabezado indica si un recurso puede ser compartida basada devolviendo el valor de la solicitud de Origen de encabezado, «*», o «null» en la respuesta. ABNF:

    Access-Control-Allow-Origin = «Access-Control-Allow-Origin» «:» origen-lista-o-null | «*»

    En la práctica, el origen de la lista-o nulo en la producción es más limitada. En lugar de permitir que una lista separada por espacios de los orígenes, es un único origen o de la cadena «null».

    Y de nuevo en la definición de la lista de origen. Además, se indica si se desea permitir la cadena «null» como un origen, no sería capaz de ser incorporado en una lista origen de todos modos.

    Para seguir con la dinámica de encabezado generado basado en el cliente Origin encabezado y si que coincida con su lista blanca.

    • Hay ramificaciones de seguridad teniendo en cuenta que el cliente es el origen de encabezado puede ser manipulada por el cliente?
    • El origen de encabezado está diseñada para proteger a un usuario de sitios web maliciosos. Por ejemplo, si mywebsite.com envía una petición AJAX mybank.com, debe ser rechazada por defecto. Si un usuario quiere modificar este comportamiento, aunque, a continuación, que sin duda podría hacer lo que quieran. Los usuarios pueden fácilmente abrir su navegador de la consola, el envío de solicitudes a ese sitio web, y el uso de la respuesta de los de cualquier otra página en la que se han abierto. Cualquier HTTP cumplimiento de navegador web no vamos a un sitio web de forma automática de hacer esto, sin embargo.
    • ¿Alguien sabe, ¿cómo puedo validar una lista de orígenes proporcionados por un cliente? Debe coinciden con todas las entradas lista de dominios permitidos o al menos uno?
    • De acuerdo a las especificaciones 6.2.2 agente de usuario nunca debe producir múltiples orígenes, al menos para el vuelo de la solicitud: «El Origen de cabecera puede contener una única origen como el agente de usuario no sigue las redirecciones.»
    • Es mejor prevenir que lamentar; así podría comprobar la totalidad de la lista. Parece que el origen de la lista es tan raro que es casi siempre un origen único. Si tiene cualquier problema entonces usted puede mirar en la adición de otros orígenes permitido o cambiar el comportamiento.
  2. 0

    Si usted necesita para permitir un origen que contenga una determinada palabra «ejemplo» usted puede utilizar la siguiente configuración en apache vhost.

    SetEnvIf Origin "^((?:https?:\/\/)?(?:[^@\n][email protected])?(?:www.)?.example?.*)" REFERER=$0 
    Header always set Access-Control-Allow-Origin %{REFERER}e env=REFERER
    

    Esto va a satisfacer algunas de las siguientes condiciones de Origen:

    http://abc.bcd.example.com
    https://www.example.in 
    http://abcdexample.com 
    many more
    

    Usted puede ajustar el anterior regex como por su exigencia.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea