Отключить политику одинакового происхождения в Firefox


110

Я разрабатываю локальный исследовательский инструмент, который требует, чтобы я отключил ту же политику происхождения Firefox (с точки зрения доступа к скриптам меня не волнуют запросы между доменами).

В частности, я хочу, чтобы сценарии в домене хоста имели возможность доступа к произвольным элементам в любых фреймах, встроенных в страницу, независимо от их домена.

Я знаю предыдущие вопросы и ответы, в которых упоминалось расширение CORS FF, но это не то, что мне нужно, поскольку оно разрешает только CORS, но не доступ к скриптам.

Если это не может быть сделано легко, я также был бы признателен за любую информацию, которая укажет мне на конкретную часть кода FF src, которую я могу изменить, чтобы отключить SOP, чтобы я мог перекомпилировать FF.


4
Было бы интересно с разработчиками. Поскольку одна и та же политика происхождения предназначена для безопасности пользователей, а не разработчиков, должна быть предусмотрена возможность разрешить сценариям с данного сайта проходить ограничения. Но разработчики - тоже люди, поэтому вы можете потерять и свою личную информацию.
Danubian Sailor

1
Я считаю, что это невозможно прямо сейчас, вот связанный отчет об ошибке в Firefox Bugzilla: bugzilla.mozilla.org/show_bug.cgi?id=1039678
руцкий

Единственное хорошее решение - внедрять заголовки плагином на основе доменов: stackoverflow.com/a/44093160/956397 Все остальное небезопасно ...
PiTheNumber

Ответы:


82

Существует расширение Firefox, которое добавляет заголовки CORS к любому HTTP-ответу, работающему в последней версии Firefox ( сборка 36.0.1 ), выпущенной 5 марта 2015 года . Я протестировал его, и он работает как на Windows 7, так и на Mavericks. Я расскажу вам, как заставить его работать.

1) Получение расширения

Вы можете скачать xpi отсюда (авторские сборки) или отсюда (зеркало, может не обновляться).

Или загрузите файлы с GitHub. Теперь он также доступен в Firefox Marketplace: Загрузите здесь . В этом случае надстройка устанавливается после нажатия кнопки «Установить», и вы можете перейти к шагу 4.

Если вы скачали xpi, вы можете перейти к шагу 3. Если вы загрузили zip-архив с GitHub, перейдите к шагу 2.

2) Создание XPI

Вам нужно распаковать zip, попасть в папку «cors-везде-firefox-addon-master», выбрать все элементы и заархивировать их. Затем переименуйте созданный zip в * .xpi

Примечание. Если вы используете графический интерфейс OS X, он может создавать некоторые скрытые файлы, поэтому вам лучше использовать командную строку.

3) Установка xpi

Вы можете просто перетащить xpi в firefox или перейти к: «about: addons», щелкнуть шестеренку в правом верхнем углу и выбрать «установить надстройку из файла», затем выбрать файл .xpi. Теперь перезапустите firefox.

4) Заставить его работать

Теперь расширение не будет работать по умолчанию. Вам нужно перетащить значок расширения на панель расширений, но не беспокойтесь. Есть картинки!

  • Нажмите на меню Firefox.
  • Нажмите на Настроить

p1

  • Перетащите CorsE на панель
  • Теперь щелкните значок, когда он станет зеленым, заголовки CORS будут добавлены к любому ответу HTTP.

p2

5) Проверка работоспособности

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) Заключительные соображения

Обратите внимание, что https на http недопустим .

Возможно, есть способ обойти это, но это лежит в основе вопроса.


1
Вы можете отключить HTTP / HTTPS защиты смешанного содержимого, установив security.mixed_content.block_active_contentв ложь и security.mixed_content.block_display_contentв верно . Имейте в виду, что вы отключаете некоторую безопасность, и это должно быть временным решением.
bufh 05

4
Как автор этого дополнения, я не уверен, что он решит именно этот вопрос. Хотя приятно получить упоминание.
spenibus

2
@spenibus - ваше дополнение должно быть подписано - я не могу его установить :( - support.mozilla.org/en-US/kb/…
Peter Ajtai

3
@PeterAjtai Mozilla продолжает изо всех сил меня раздражать, я вижу. В ожидании обзора: addons.mozilla.org/en-US/firefox/addon/cors-everywhere Надеюсь, будет автоматически подписан.
spenibus

1
в about: config установите для xpinstall.signatures.required значение false, чтобы установить аддон. У меня это сработало.
user2345998

44
about:config -> security.fileuri.strict_origin_policy -> false

21
Спасибо @Niklas, однако, я думаю, что это отключает только проверки политики одного и того же происхождения fileuri - вероятно, используется для тестирования локальных веб-разработчиков. Меня все еще останавливает, когда я пытаюсь получить доступ к узлам DOM в iframe с доменом B из JavaScript в домене A.
Yuchen Zhou

127
это ничего не делает
vknyvz

2
Подтверждено, что это работает в моей версии firefox (разработчик): 40. Спасибо за подсказку @Niklas.
bufh 05

11
Это параметр специально для отладки и контролирует доступ локальных файлов к другим локальным файлам (при значении true локальный файл может получать доступ только к локальным файлам в той же папке или подпапках, при значении false локальный файл может получить доступ ко всем локальным файлам) . Источник
Джон Эгертон

5
Это действительно что - то сделать, в моем случае это позволяет мне получить доступ к локальным ресурсам из документа обслуживаемого над file://протоколом. Ученые-компьютерщики должны придавать большее значение слову «что угодно» - если вы не проверили все (чего вы еще не делали), постарайтесь быть более консервативными в своих замечаниях. То же самое и со словом «бесполезный».
атп

12

Я понял, что мой старый ответ отвергнут, потому что я не указал, как конкретно отключить ту же политику происхождения FF. Здесь я дам более развернутый ответ:

Предупреждение: это требует повторной компиляции FF, и недавно скомпилированная версия Firefox не сможет снова включить SOP.

Ознакомьтесь с исходным кодом Mozilla Firefox, найдите nsScriptSecurityManager.cpp в каталоге src. Я буду использовать в качестве примера тот, который указан здесь: http://mxr.mozilla.org/aviarybranch/source/caps/src/nsScriptSecurityManager.cpp

Перейдите к реализации функции nsScriptSecurityManager :: CheckSameOriginURI, которая является строкой 568 на дату 02.03.2016.

Сделайте так, чтобы эта функция всегда возвращала NS_OK.

Это навсегда отключит СОП.

Ответ надстройки браузера от @Giacomo должен быть полезен для большинства людей, и я принял этот ответ, однако для моих личных исследовательских потребностей (TL; здесь не буду объяснять) этого недостаточно, и я полагаю, что другим исследователям может потребоваться то, что Я сделал здесь, чтобы полностью убить СОП.


Строка 499 на сегодняшний день, зеркало Git: github.com/mozilla/gecko-dev/blob/…
kamranicus

9

Я написал надстройку для решения этой проблемы в Firefox (скоро появится версия Chrome, Opera). Он работает с последней версией Firefox с красивым интерфейсом и поддерживает регулярное выражение JS: https://addons.mozilla.org/en-US/firefox/addon/cross-domain-cors

введите описание изображения здесь


1
Спасибо вам. Кроме того, существует аналогичное расширение CORS-Everywhere .
nachtigall

3

По состоянию на сентябрь 2016 года этот аддон лучше всего отключает CORS : https://github.com/fredericlb/Force-CORS/releases

На панели параметров вы можете настроить, какой заголовок вводить и на каком конкретном веб-сайте он будет включен автоматически.

введите описание изображения здесь


1
Из wiki.mozilla.org/Add-ons/Extension_Signing : Firefox 48: Выпускная и бета-версии Firefox для ПК не позволяют устанавливать неподписанные расширения без переопределения. Я не смог найти подписанную версию этого дополнения.
FelixM

1
@FelixM Вот как это сделать: ghacks.net/2016/08/14/…
Хадо Михал

@FelixM Firefox Developer Edition имеет логическую опцию "xpinstall.signatures.required" во флагах "about: config". Однако версия 0.1.1 этого расширения несовместима с Firefox Developer Edition 58.0 (Quantum).
alxndr

2

В CORS-везде аддон работает для меня до Firefox 68, после 68 Мне нужно настроить «privacy.file_unique_origin» -> False (по открытому «о: конфигурациях») для решения « CORS запроса не HTTP » для нового CORS правил общего происхождения введен.


1

В about:configдополнении content.cors.disable(пустая строка).


1
Это было проверено? Из того, что я читаю, этот pref был разработан для того, чтобы все запросы CORS не выполнялись, когда он установлен true, но ничего не говорит о falseдругих значениях. «В Firefox предпочтение, которое отключает CORS, - это content.cors.disable. Установка этого значения в true отключает CORS, поэтому в любом случае запросы CORS всегда завершаются сбоем с этой ошибкой». developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/…
stealththeninja

В Firefox 68.7 этот параметр даже недоступен.
Гуннар Бернштейн,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.