Significa para scripts (legítimos) entre sites

5

Existem bons meios para permitir que scripts de dois ou mais domínios colaborem na mesma página do navegador? Eu quero criar uma plataforma extensível, onde forneço o modelo e algumas visualizações, mas também permitir que terceiros criem suas próprias visualizações também. A idéia é que toda a manipulação do modelo será feita através de sua API, e somente o modelo se comunicará com o servidor (principal), mas os usuários poderão incluir scripts de outros domínios que também usam essa API (esses scripts podem "chamar de home" "se eles quiserem embora).

Eu sei que muitos sites já fazem isso, por exemplo, quando usam um CDN para fornecer bibliotecas como o jQuery. No entanto, lembro-me também de ter lido que essas bibliotecas precisavam ser "modificadas" de alguma forma para que não fossem confundidas com ataques XSS, embora não consegui encontrar mais informações sobre o assunto. Eu tenho apenas um conhecimento superficial de como os navegadores isolam o conteúdo para diferentes domínios e até que ponto esse isolamento ocorre, então alguns apontadores nessa direção seriam muito bem-vindos.

Também estou ciente do método de usar iframes para carregar conteúdos "menos confiáveis", e parece que a comunicação entre a página principal e seus iframes é bastante simples . Prefiro não usar esse método, mas o farei se houver bons benefícios de segurança ao fazer isso. No entanto, não tenho certeza se esse é o caso, já que o iframe pode chamar métodos arbitrários na página pai ... ( Editar : pelo que entendi do comentário de Florian Margaine, o método na pergunta vinculada só funciona para iframes de mesma origem, está correto? Nesse caso, posso ver os benefícios de segurança agora) Alguém com experiência no assunto pode me dizer como funciona?

Estas são as únicas opções que conheço, outras sugestões também são bem-vindas. Eu também gostaria de observar que, embora deva haver algum nível de confiança entre o usuário e o terceiro que fornece o script (já que seu propósito é manipular o modelo de propriedade daquele usuário), cada usuário estará livre para escolher extensões. à sua vontade (ou seja, os scripts disponíveis não serão restritos aos que eu avaliei e endossou anteriormente), portanto, qualquer meio de mitigar os problemas de segurança para os usuários também é bem-vindo.

Editar: Deixe-me esclarecer um pouco a questão. O objetivo aqui não é fazer solicitações HTTP para outros domínios, apenas para ter um melhor controle do que os diferentes scripts fazem na mesma página. Pelo que entendi até agora sobre a mesma política de origem, páginas diferentes não podem se comunicar, a menos que sejam do mesmo domínio, mas scripts na mesma página, mas provenientes de domínios diferentes pode fazer o que quiserem. Isso está correto? (se for, então eu acho que a minha pergunta é discutível ...)

    
por mgibsonbr 18.05.2012 / 21:19
fonte

1 resposta

3

Você pode usar JSONP . Não é tão difícil escrever uma pequena função, aqui está um pequeno exemplo de um dos meus sites;

function ecbCreateScript(url, callback) {
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = url;

    script.onreadystatechange = loadEcbForm;
    script.onload = loadEcbForm;

    // fire the loading
    head.appendChild(script);
}
    
por 18.05.2012 / 21:57
fonte