Melhor método: acesso-controlo-permitir-origem domínios de origem múltipla

Esta pergunta já foi feita aqui antes e deu uma série de boas respostas, principalmente: Acesso-Controlo-Permissão-Origem Domínios De Origem Múltipla?

no entanto, parece existir uma lacuna na explicação em termos do método aprovado que deve ser aplicado. Lendo através da documentação W3 temos o que me parece ser um conflito de orientação.

Em primeiro lugar, vemos a resposta dada como a maneira certa de o fazer em muitas das respostas anteriores que dita que o servidor de host deve ecoar dinamicamente de volta a "origem" dada, se ela aparecer em um 'whitelist' predefinido. http://www.w3.org/TR/cors/#resource-implementation

No entanto, muitas das respostas e métodos utilizados também aludem a uma lista delimitada de espaço que também pode ser usada como um método de passar várias 'origens' para permitir. Se dermos uma olhada em outro pedaço de documentação W3 em http://www.w3.org/wiki/CORS_Enabled vemos um exemplo disso na primeira secção da página como:

 Access-Control-Allow-Origin: http://example.com:8080 http://blah.example.com http://foo.example.com
Destes dois métodos, teria todo o gosto em incorparar, seja como for, pode haver uma grande lista de URLs que terão de ser anexados e, por isso, queria assegurar-me de que estou a fazer isto de forma cordial pela primeira vez. Se alguém tiver alguma visão sobre os dois métodos mencionados acima, eu ficaria muito grato de ouvir a decisão em suas escolhas e se houver um guia definitivo para o método recomendado eu posso ter perdido.

Author: Community, 2014-08-14

2 answers

A documentação sobre isto parece implicar que permite múltiplas origens com uma lista separada por espaço, mas não é isso que realmente significa. Aqui está o que eu poderia reunir como a resposta mais definitiva à sua pergunta: o cabeçalho Access-Control-Allow-Origin deve ser o mesmo valor que o cabeçalho Origin desde que você queira permitir.

A razão pela qual não é uma lista branca que você envia de volta para o cliente é porque tecnicamente o cliente pode enviar uma lista de origens separadas por espaço para que o servidor possa valide o pedido. A finalidade da lista de origem, então, é porque o pedido poderia ter vindo de várias origens (ie. o pedido foi redirecionado para todos os domínios). um conjunto de testes torna fácil observar este comportamento com diferentes possibilidades de redirecionamento, mesmo que uma lista separada por espaço nunca seja gerada (pelo menos pelo Firefox).

Isto é ilustrado mais baixo no primeiro documento W3C ligado {[8] } que forneceu:

O cabeçalho Access-Control-Allow-Origin indica se um recurso pode ser compartilhado com base no retorno do valor do cabeçalho do pedido de origem, "*", ou "null" na resposta. ABNF:

Access-Control-Allow-Origin = "Access-Control-Allow-Origin"": " origin-list-or-null | "*"

Na prática, a produção "origem-lista-ou-nula" é mais limitada. Ao invés de permitir uma lista separada por espaço de origens, é uma única origem ou a string "null".
E outra vez em A definição da lista de origem. Além disso, ele mostra que se você quiser permitir a string "null" como uma origem, ele não seria capaz de ser incorporado em uma lista de origem de qualquer maneira.

Por isso, mantém-te com o cabeçalho dinamicamente gerado com base no cabeçalho Origin do cliente e se isso corresponde à tua lista branca.

 36
Author: Pluto, 2014-08-27 00:34:54

Se precisar de permitir uma origem que contenha uma palavra específica "exemplo", poderá usar a seguinte configuração no seu vhost apache.

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

Isto irá satisfazer algumas das seguintes condições de origem:

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

Pode ajustar a regex acima de acordo com as suas necessidades.

 0
Author: Sandeep M, 2018-02-21 10:34:58