Если я захожу на вредоносный веб-сайт, я хочу быть уверен, что:
- Он не может прочитать мои личные данные с других веб-сайтов, которые я использую.Представьте, что attacker.com читает gmail.com
- Он не может выполнять действий от моего имени на других веб-сайтах, которые я использую.Подумайте, что Attack.com переводит средства со своего счета на bank.com
Политика единого происхождения решает первую проблему.Вторая проблема называется подделкой межсайтовых запросов и не может быть решена при существующих междоменных ограничениях.
Та же политика происхождения в целом соответствует следующим правилам -
- Правило 1: не позволяет вам читать что-либо из другого домена
- Правило 2: позволяет писать все, что вы хотите, в другом домене, но правило # 1 не позволяет вам читать ответ.
- Правило 3: Вы можете свободно создавать междоменные запросы GET и POST, но вы не можете контролировать заголовки HTTP
Позволяет увидеть, как различные вещи, перечисленные вами, соответствуютПриведенные выше правила: теги
<img>
позволяют сделать HTTP-запрос, но нет способа прочитать содержимое изображения, кроме простого его отображения.Например, если я сделаю это <img src="http://bank.com/get/latest/funds"/>
, запрос будет обработан (правило 2).Но злоумышленник не может увидеть мой баланс (правило 1). Теги
<script>
работают в основном как <img>
.Если вы сделаете что-то вроде <script src="http://bank.com/get/latest/funds">
, запрос будет обработан.Браузер также попытается проанализировать ответ как JavaScript, и потерпит неудачу.
Хорошо известно злоупотребление тегами <script>
под названием JSONP, когда вы вступаете в сговор с междоменным доменом.сервер, так что вы можете «читать» междоменный.Но без явного участия междоменного сервера вы не можете прочитать ответ через тег <script>
<link>
, поскольку таблицы стилей работают в основном как теги <script>
, кромеОтвет оценивается как CSS.В общем, вы не можете прочитать ответ - если ответ каким-то образом не является правильно сформированным CSS.
<iframe>
по сути является новым окном браузера.Вы не можете прочитать HTML междоменного iframe.Кстати, вы можете изменить URL-адрес междоменного iframe, но не можете прочитать URL-адрес.Обратите внимание, как это следует двум упомянутым выше правилам.
XMLHttpRequest
- самый универсальный метод для выполнения HTTP-запросов.Это полностью в контроле разработчиков;браузер ничего не делает с ответом.Например, в случае <img>
, <script>
или <link>
браузер принимает определенный формат и, как правило, проверяет его соответствующим образом.Но в XHR нет предписанного формата ответа.Таким образом, браузеры применяют одну и ту же политику происхождения и не позволяют вам читать ответ, если только междоменный веб-сайт явно не разрешает вам.
Шрифты через font-face
являются аномалией.AFAIK, только Firefox требует opt-in поведения;другие браузеры позволяют использовать шрифты так же, как вы используете изображения.
Короче говоря, одинаковая политика происхождения является последовательной.Если вы найдете способ сделать междоменный запрос и , прочитав ответ без явного разрешения междоменного веб-сайта, вы будете получать заголовки по всему миру.* РЕДАКТИРОВАТЬ : Почему я не могу обойти все это с помощью прокси-сервера?
Чтобы gmail отображал персонализированные данные, ему нужны файлы cookie из вашего браузера.Некоторые сайты используют базовую аутентификацию HTTP, в которой учетные данные хранятся в браузере.
Прокси-серверная сторона не может получить доступ ни к файлам cookie, ни к базовым учетным данным.И поэтому, даже если он может сделать запрос, сервер не вернет данные, специфичные для пользователя.