Desativar a política de mesma origem do firefox

110

Estou desenvolvendo uma ferramenta de pesquisa local que exige que eu desative a política de mesma origem do Firefox (em termos de acesso de script, eu realmente não me importo com solicitações de domínio cruzado).

Mais especificamente, quero que os scripts no domínio do host possam acessar elementos arbitrários em quaisquer iframes incorporados na página, independentemente de seu domínio.

Estou ciente de perguntas e respostas anteriores que mencionaram a extensão CORS FF, mas não é disso que preciso, pois ela só permite o CORS, mas não o acesso ao script.

Se isso não puder ser feito facilmente, eu também gostaria de receber quaisquer insights que me apontem para uma parte específica do código FF src que eu possa modificar para desabilitar o SOP, para que eu possa recompilar o FF.

Yuchen Zhou
fonte
4
Seria uma coisa interessante com desenvolvedores. Visto que a mesma política de origem é projetada para a segurança dos usuários e não dos desenvolvedores, deve ser possível permitir que os scripts de um determinado site ultrapassem as restrições. Mas os desenvolvedores também são pessoas, então você também pode perder suas informações pessoais.
Marinheiro Danubiano de
1
Acredito que não seja possível agora, aqui está o relatório de bug relacionado no Firefox Bugzilla: bugzilla.mozilla.org/show_bug.cgi?id=1039678
rutsky
A única boa solução é injetar os cabeçalhos por plug-in com base nos domínios: stackoverflow.com/a/44093160/956397 Tudo o mais é inseguro ...
PiTheNumber

Respostas:

82

Há uma extensão do Firefox que adiciona os cabeçalhos CORS a qualquer resposta HTTP funcionando no Firefox ( compilação 36.0.1 ) mais recente lançado em 5 de março de 2015 . Eu testei e está funcionando tanto no Windows 7 quanto no Mavericks. Vou guiá-lo pelas etapas para fazê-lo funcionar.

1) Obtendo a extensão

Você pode baixar o xpi aqui (compilações do autor) ou aqui (espelho, pode não ser atualizado).

Ou baixe os arquivos do GitHub. Agora também no Firefox Marketplace: Baixe aqui . Nesse caso, o complemento é instalado depois de clicar em instalar e você pode pular para a etapa 4.

Se você baixou o xpi, pode pular para a etapa 3. Se você baixou o zip do GitHub, vá para a etapa 2.

2) Construindo o xpi

Você precisa extrair o zip, entrar na pasta "cors-anywhere-firefox-addon-master", selecionar todos os itens e compactá-los. Em seguida, renomeie o zip criado como * .xpi

Nota: Se você estiver usando o OS X gui, ele pode criar alguns arquivos ocultos, então seria melhor usar a linha de comando.

3) Instalando o xpi

Você pode simplesmente arrastar e soltar o xpi para o firefox, ou ir para: "about: addons", clicar na engrenagem no canto superior direito e selecionar "instalar add on from file" e selecionar seu arquivo .xpi. Agora, reinicie o Firefox.

4) Fazer funcionar

Agora, a extensão não funcionará por padrão. Você precisa arrastar o ícone da extensão para a barra de extensão, mas não se preocupe. Existem fotos!

  • Clique no menu do Firefox
  • Clique em Personalizar

p1

  • Arraste CorsE para a barra
  • Agora, clique no ícone, quando estiver verde os cabeçalhos CORS serão adicionados a qualquer resposta HTTP

p2

5) Testar se está funcionando

jQuery

$.get( "http://example.com/", function( data ) {
  console.log (data);
});

JavaScript

xmlhttp=new XMLHttpRequest();

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
        console.log(xmlhttp.responseText);
    }
}

xmlhttp.open("GET","http://example.com/");
xmlhttp.send();

6) Considerações finais

Observe que https a http não é permitido .

Pode haver uma maneira de contornar isso, mas está além do escopo da questão.

Giacomo Tecya Pigani
fonte
1
Você pode desativar HTTP / HTTPS proteção de conteúdo misto, definindo security.mixed_content.block_active_contenta falsa e security.mixed_content.block_display_contenta verdadeira . Lembre-se de que você está desativando alguma segurança e esta deve ser uma solução temporária.
bufh
4
Como autor deste complemento, não estou realmente convencido de que resolveria esta questão em particular. É bom receber uma menção, no entanto.
spenibus
2
@spenibus - você deve obter seu complemento assinado - Não consigo instalá-lo :( - support.mozilla.org/en-US/kb/…
Peter Ajtai
3
@PeterAjtai Mozilla continua se esforçando para me irritar, eu vejo. Aguardando revisão: addons.mozilla.org/en-US/firefox/addon/cors-everywhere Deve ser assinado automaticamente.
spenibus de
1
em about: config set xpinstall.signatures.required para false para instalar o addon. Funcionou para mim
user2345998
43
about:config -> security.fileuri.strict_origin_policy -> false
Niklas
fonte
21
Obrigado @Niklas, no entanto, acho que isso apenas desativa as verificações de política de mesma origem do fileuri - provavelmente usado para teste de desenvolvimento da web local. Ainda me impede de tentar acessar os nós DOM em um iframe com o domínio B de um JavaScript no domínio A.
Yuchen Zhou
127
isso não faz nada
vknyvz
2
Confirmei que funciona na minha versão do firefox (desenvolvedor): 40. Obrigado pela dica @Niklas.
bufh
11
Esta é uma configuração específica para depuração e controla o acesso de arquivos locais a outros arquivos locais (definido como verdadeiro, um arquivo local só pode acessar arquivos locais na mesma pasta ou subpastas; definido como falso, um arquivo local pode acessar todos os arquivos locais) . Fonte
Jon Egerton
5
Ele faz alguma coisa, no meu caso, me permite acessar recursos locais de um documento servido por file://protocolo. Os cientistas da computação deveriam colocar mais peso na palavra "qualquer coisa" - a menos que você tenha testado tudo (o que não fez), tente ser mais conservador com seus comentários. O mesmo vale para o uso da palavra "inútil".
amn
12

Percebi que minha resposta anterior foi rejeitada porque não especifiquei como desabilitar a política de mesma origem do FF especificamente. Aqui darei uma resposta mais detalhada:

Aviso: Isso requer uma recompilação do FF, e a versão recém-compilada do Firefox não será capaz de habilitar SOP novamente.

Verifique o código-fonte do Mozilla Firefox, encontre nsScriptSecurityManager.cpp no ​​diretório src. Vou usar aquele listado aqui como exemplo: http://mxr.mozilla.org/aviarybranch/source/caps/src/nsScriptSecurityManager.cpp

Vá para a implementação da função nsScriptSecurityManager :: CheckSameOriginURI, que é a linha 568 na data 02/03/2016.

Faça com que essa função sempre retorne NS_OK.

Isso desativará o SOP para sempre.

A resposta do complemento do navegador por @Giacomo deve ser útil para a maioria das pessoas e eu aceitei essa resposta, no entanto, para minhas necessidades de pesquisa pessoal (TL; não vou explicar aqui) não é suficiente e imagino que outros pesquisadores possam precisar fazer o que Eu fiz aqui para matar totalmente o SOP.

Yuchen Zhou
fonte
Linha 499 a partir de hoje, espelho Git: github.com/mozilla/gecko-dev/blob/…
kamranicus
3

Em setembro de 2016, este complemento é o melhor para desativar o CORS : https://github.com/fredericlb/Force-CORS/releases

No painel de opções, você pode configurar qual cabeçalho injetar e um site específico para ativá-lo automaticamente.

insira a descrição da imagem aqui

Khado Mikhal
fonte
1
De wiki.mozilla.org/Add-ons/Extension_Signing : Firefox 48: As versões de lançamento e beta do Firefox para Desktop não permitem a instalação de extensões não assinadas, sem anulação. Não consegui encontrar uma versão assinada deste addon.
FelixM de
1
@FelixM Veja como fazer: ghacks.net/2016/08/14/…
Khado Mikhal
@FelixM Firefox Developer Edition tem uma opção booleana "xpinstall.signatures.required" nos sinalizadores "about: config". No entanto, a versão 0.1.1 desta extensão não é compatível com Firefox Developer Edition 58.0 (Quantum).
alxndr
2

O complemento cors- anywhere funciona para mim até o Firefox 68, após 68 eu preciso ajustar 'privacy.file_unique_origin' -> false (por abrir 'about: config') para resolver ' solicitação CORS não HTTP ' para nova regra CORS de mesma origem introduzido.

ob.yann
fonte
1

Em about:configadicionar content.cors.disable(string vazia).

ghst
fonte
1
Isso foi testado? Pelo que estou lendo, essa preferência foi projetada para fazer todas as solicitações CORS falharem quando definidas como true, mas não diz nada sobre falseou outros valores. "No Firefox, a preferência que desabilita o CORS é content.cors.disable. Definir como true desabilita o CORS, então, sempre que for o caso, as solicitações do CORS sempre falharão com este erro." developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/…
stealththeninja
No Firefox 68.7, essa configuração nem mesmo está disponível.
Gunnar Bernstein