Cross-origin resource sharing

Cross-Origin Resource Sharing ou CORS é um mecanismo que permite que recursos restritos em uma página da web sejam recuperados por outro domínio fora do domínio ao qual pertence o recurso que será recuperado.[1] Uma página da web pode integrar livremente recursos de diferentes origens, como imagens, folhas de estilo, scripts, iframes e vídeos.[2] Certas "solicitações de domínio cruzado", em particular as solicitações Ajax, são proibidas por padrão pela política de segurança de mesma origem.

CORS define uma maneira pela qual um navegador e um servidor podem interagir para determinar se é ou não seguro permitir uma solicitação de origem cruzada.[3] Isso permite mais liberdade e funcionalidade do que as solicitações da mesma origem, mas é mais seguro do que a simples autorização para ter todas as solicitações de origem cruzada. O padrão para CORS foi publicado originalmente como uma recomendação W3C,[4] mas este documento está obsoleto.[5] A especificação mantida ativamente que define o CORS é o Fetch Living Standard do WHATWG.[6]

Histórico editar

O suporte de origem cruzada foi originalmente proposto por Matt Oshry, Brad Porter e Michael Bodell da Tellme Networks em março de 2004 para inclusão no VoiceXML 2.1,[7] a fim de permitir consultas seguras de origem cruzada por navegadores VoiceXML. O mecanismo foi considerado de natureza geral e não específico para VoiceXML e foi subsequentemente separado em uma nota de implementação.[8] O grupo de trabalho W3C WebApps, com a participação dos principais fornecedores de navegadores, começou a formalizar a nota em um rascunho de trabalho do W3C direcionado a uma recomendação formal do W3C.

Em maio de 2006, o primeiro esboço do projeto W3C foi apresentado.[9] Em março de 2009, o projeto foi renomeado para "Cross-Origin Resource sharing"[10] e, em janeiro de 2014, foi aceito como uma recomendação W3C.[11]

Como funciona o CORS editar

O padrão CORS descreve novos cabeçalhos HTTP que fornecem aos navegadores e servidores uma maneira de solicitar uma URL remota apenas se eles tiverem permissão. Embora certas validações e autorizações possam ser realizadas pelo servidor, geralmente é responsabilidade do navegador oferecer suporte a esses cabeçalhos e honrar as restrições que eles impõem.

Para métodos de solicitação Ajax e HTTP que podem modificar dados (geralmente métodos HTTP diferentes de GET, ou para usar POST com alguns tipos MIME), a especificação exige que os navegadores "verifiquem a solicitação upstream", solicitando os métodos suportados pelo servidor através de um método de pedido HTTP OPTIONS e, em seguida, após "aprovação" do servidor, enviar o pedido real com o método de pedido HTTP. Os servidores também podem notificar os clientes se "credenciais" (incluindo cookies e dados de autenticação HTTP) devem ser enviadas com a solicitação.[12]

 

CORS e JSONP editar

O CORS pode ser usado como uma alternativa moderna ao modelo JSONP. Enquanto o JSONP oferece suporte apenas ao método de solicitação GET, o CORS também oferece suporte a outros tipos de solicitações HTTP. O CORS permite que o programador da web use o XMLHttpRequest usual, que tem melhor tratamento de erros do que JSONP. Por outro lado, o JSONP funciona em navegadores mais antigos que são anteriores ao suporte ao CORS. CORS é compatível com a maioria dos navegadores da web modernos. Além disso, enquanto o JSONP pode causar problemas de segurança de cross-site scripting (XSS) quando o site está comprometido, o CORS permite que os sites processem manualmente as respostas para aumentar a segurança.[3][13]

Referências

  1. on July 6, 2009 by Arun Ranganathan (6 de julho de 2009). Hacks.mozilla.org, ed. «cross-site xmlhttprequest with CORS ✩ Mozilla Hacks – the Web developer blog». Consultado em 5 de julho de 2012 
  2. MDN (ed.). «Same-origin policy / Cross-origin network access» 
  3. a b NCZOnline (ed.). «Cross-domain Ajax with Cross-Origin Resource Sharing». Consultado em 5 de julho de 2012 
  4. «Cross-Origin Resource Sharing» 
  5. «WebAppSec Working Group Minutes» 
  6. «Fetch Living Standard» 
  7. W3.org, ed. (23 de março de 2004). «Voice Extensible Markup Language (VoiceXML) 2.1». Consultado em 5 de julho de 2012 
  8. W3.org (ed.). «Authorizing Read Access to XML Content Using the <?access-control?> Processing Instruction 1.0». Consultado em 5 de julho de 2012 
  9. W3.org (ed.). «Authorizing Read Access to XML Content Using the <?access-control?> Processing Instruction 1.0 W3C - Working Draft 17 May 2006». Consultado em 17 de agosto de 2015 
  10. W3.org (ed.). «Cross-Origin Resource Sharing - W3C Working Draft 17 March 2009». Consultado em 17 de agosto de 2015 
  11. W3.org (ed.). «Cross-Origin Resource Sharing - W3C Recommendation 16 January 2014». Consultado em 17 de agosto de 2015 
  12. MOZILLA (ed.). «cross-site xmlhttprequest with CORS». Consultado em 5 de setembro de 2012 
  13. caniuse.com (ed.). «When can I use... Cross Origin Resource Sharing». Consultado em 12 de julho de 2012 

Ligações externas editar