Desactivar la política del mismo origen de Firefox

110

Estoy desarrollando una herramienta de investigación local que me obliga a desactivar la misma política de origen de Firefox (en términos de acceso al script, no me preocupan las solicitudes entre dominios).

Más específicamente, quiero que los scripts en el dominio de host puedan acceder a elementos arbitrarios en cualquier iframes incrustado en la página, independientemente de su dominio.

Soy consciente de las preguntas y respuestas anteriores que mencionaron la extensión CORS FF, pero eso no es lo que necesito, ya que solo permite CORS, pero no acceso al script.

Si no se puede hacer fácilmente, también agradecería cualquier información que me indique una parte específica del código FF src que puedo modificar para deshabilitar SOP, de modo que pueda volver a compilar FF.

Yuchen Zhou
fuente
4
Sería interesante para los desarrolladores. Dado que la misma política de origen está diseñada para la seguridad de los usuarios y no de los desarrolladores, debería ser posible permitir que los scripts del sitio determinado superen las restricciones. Pero los desarrolladores también son personas, por lo que también podría perder su información personal.
Marinero del Danubio
1
Creo que no es posible en este momento, aquí está relacionada informe de error en Firefox Bugzilla: bugzilla.mozilla.org/show_bug.cgi?id=1039678
Rutsky
La única buena solución es inyectar los encabezados mediante un complemento basado en dominios: stackoverflow.com/a/44093160/956397 Todo lo demás es inseguro ...
PiTheNumber

Respuestas:

82

Hay una extensión de Firefox que agrega los encabezados CORS a cualquier respuesta HTTP que funcione en el último Firefox ( compilación 36.0.1 ) lanzado el 5 de marzo de 2015 . Lo probé y funciona tanto en Windows 7 como en Mavericks. Lo guiaré a través de los pasos para que funcione.

1) Obtener la extensión

Puede descargar el xpi desde aquí (compilaciones del autor) o desde aquí (espejo, es posible que no se actualice).

O descargue los archivos de GitHub. Ahora también está en Firefox Marketplace: descárguelo aquí . En este caso, el complemento se instala después de hacer clic en instalar y puede pasar al paso 4.

Si descargó el xpi, puede saltar al paso 3. Si descargó el zip de GitHub, vaya al paso 2.

2) Construyendo el xpi

Necesitas extraer el zip, entrar en la carpeta "cors-anywhere-firefox-addon-master", seleccionar todos los elementos y comprimirlos. Luego, cambie el nombre del zip creado como * .xpi

Nota: Si está utilizando la interfaz gráfica de usuario de OS X, puede crear algunos archivos ocultos, por lo que sería mejor utilizar la línea de comandos.

3) Instalación del xpi

Puede simplemente arrastrar y soltar el xpi en Firefox, o ir a: "about: addons", haga clic en el engranaje en la esquina superior derecha y seleccione "instalar agregar desde el archivo", luego seleccione su archivo .xpi. Ahora, reinicia Firefox.

4) Hacer que funcione

Ahora, la extensión no funcionará de forma predeterminada. Debes arrastrar el ícono de la extensión a la barra de extensión, pero no te preocupes. ¡Hay fotografías!

  • Haga clic en el menú de Firefox
  • Haga clic en Personalizar

p1

  • Arrastra CorsE a la barra.
  • Ahora, haga clic en el ícono, cuando esté verde, los encabezados CORS se agregarán a cualquier respuesta HTTP

p2

5) Probando si 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) Consideraciones finales

Tenga en cuenta que https a http no está permitido .

Puede haber una forma de evitarlo, pero está detrás del alcance de la pregunta.

Giacomo Tecya Pigani
fuente
1
Puede deshabilitar HTTP / HTTPS protección de contenido mixto mediante el establecimiento security.mixed_content.block_active_contentde falsa y security.mixed_content.block_display_contentde verdad . Tenga en cuenta que está deshabilitando cierta seguridad y esta debería ser una solución temporal.
bufh
4
Como autor de este complemento, no estoy realmente convencido de que resuelva esta pregunta en particular. Sin embargo, es bueno recibir una mención.
spenibus
2
@spenibus - debe firmar su complemento - No puedo instalarlo :( - support.mozilla.org/en-US/kb/…
Peter Ajtai
3
@PeterAjtai Mozilla sigue esforzándose por molestarme, lo veo. En espera de revisión: addons.mozilla.org/en-US/firefox/addon/cors-everywhere Es de esperar que se firme automáticamente.
spenibus
1
en about: config set xpinstall.signatures.required en false para instalar el complemento. Funcionó para mí.
user2345998
43
about:config -> security.fileuri.strict_origin_policy -> false
Niklas
fuente
21
Gracias @Niklas, sin embargo, creo que esto solo deshabilita las verificaciones de la política de origen de fileuri, probablemente utilizado para pruebas de desarrollo web local. Todavía me detiene cuando intento acceder a los nodos DOM en un iframe con el dominio B desde un JavaScript en el dominio A.
Yuchen Zhou
127
esto no hace nada
vknyvz
2
Confirmado que funciona en mi versión de firefox (desarrollador): 40. Gracias por el consejo @Niklas.
bufh
11
Esta es una configuración específicamente para depurar y controla el acceso de archivos locales a otros archivos locales (si se establece en verdadero, un archivo local solo puede acceder a los archivos locales en la misma carpeta o subcarpetas; si se establece en falso, un archivo local puede acceder a todos los archivos locales) . Fuente
Jon Egerton
5
hace algo, en mi caso me permite acceder a recursos locales desde un documento servido por file://protocolo. Los informáticos deberían poner más peso en la palabra "cualquier cosa"; a menos que haya probado todo (lo que no ha hecho), intente ser más conservador con sus comentarios. Lo mismo ocurre con el uso de la palabra "inútil".
amn
12

Me di cuenta de que mi respuesta anterior tiene una votación negativa porque no especifiqué cómo deshabilitar específicamente la política de origen de FF. Aquí daré una respuesta más detallada:

Advertencia: Esto requiere una recompilación de FF y la versión recién compilada de Firefox no podrá habilitar SOP nuevamente.

Consulte el código fuente de Firefox de Mozilla, busque nsScriptSecurityManager.cpp en el directorio src. Usaré el que se enumera aquí como ejemplo: http://mxr.mozilla.org/aviarybranch/source/caps/src/nsScriptSecurityManager.cpp

Vaya a la implementación de la función nsScriptSecurityManager :: CheckSameOriginURI, que es la línea 568 a la fecha 03/02/2016.

Haga que la función siempre devuelva NS_OK.

Esto desactivará SOP para siempre.

La respuesta del complemento del navegador de @Giacomo debería ser útil para la mayoría de las personas y he aceptado esa respuesta, sin embargo, para mis necesidades de investigación personal (TL; no explicaré aquí) no es suficiente y creo que otros investigadores pueden necesitar hacer lo que Lo hice aquí para matar completamente a SOP.

Yuchen Zhou
fuente
Línea 499 a partir de hoy, espejo de Git: github.com/mozilla/gecko-dev/blob/…
kamranicus
3

A partir de septiembre de 2016, este complemento es el mejor para deshabilitar CORS : https://github.com/fredericlb/Force-CORS/releases

En el panel de opciones puedes configurar qué encabezado inyectar y sitio web específico para que se habilite automáticamente.

ingrese la descripción de la imagen aquí

Khado Mikhal
fuente
1
De wiki.mozilla.org/Add-ons/Extension_Signing : Firefox 48: Las versiones de lanzamiento y Beta de Firefox para escritorio no permitirán que se instalen extensiones sin firmar, sin anulación. No pude encontrar una versión firmada de este complemento.
FelixM
1
@FelixM Así es como se hace: ghacks.net/2016/08/14/…
Khado Mikhal
@FelixM Firefox Developer Edition tiene una opción booleana "xpinstall.signatures.required" en los indicadores "about: config". Sin embargo, la versión 0.1.1 de esta extensión no es compatible con Firefox Developer Edition 58.0 (Quantum).
alxndr
2

El complemento cors- anywhere funciona para mí hasta Firefox 68, después de 68 necesito ajustar 'privacy.file_unique_origin' -> false (abriendo 'about: config') para resolver ' Solicitud CORS no HTTP ' para la nueva regla de origen CORS introducido.

ob.yann
fuente
1

En about:configagregar content.cors.disable(cadena vacía).

ghst
fuente
1
¿Esto ha sido probado? Por lo que estoy leyendo, esta preferencia fue diseñada para hacer que todas las solicitudes CORS fallen cuando se configuran en true, pero no dice nada sobre falseotros valores. "En Firefox, la preferencia que deshabilita CORS es content.cors.disable. Si se establece en verdadero, se deshabilita CORS, por lo que siempre que ese sea el caso, las solicitudes de CORS siempre fallarán con este error". developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/…
stealththeninja
A partir de Firefox 68.7, esta configuración ni siquiera está disponible.
Gunnar Bernstein