2015-08-11 2 views
191

Я сделал запрос POST к HTTP (не HTTPS) сайт, осмотрел запрос в Developer Tools в Chrome, и обнаружил, что он добавил свой собственный заголовок перед отправкой его на сервер:Что такое HTTP-заголовок «Обновить-Незащитить-Запросы»?

Upgrade-Insecure-Requests: 1 

После выполнения поиск по Upgrade-Insecure-Requests, я могу только найти information о сервере отправки this заголовка:

Content-Security-Policy: upgrade-insecure-requests 

Это кажется связанными, но все же очень разные, так как в моем случае, клиент посылает заголовок в Request, где а s вся информация, которую я нашел, касается SERVER, отправляющего связанный заголовок в ответе .


Так почему Chrome (44.0.2403.130 м) добавление Upgrade-Insecure-Requests к моей просьбе и что он делает?


Update 2016-08-24:

Этот заголовок с тех пор был добавлен в качестве W3C Candidate Recommendation и теперь официально признана.

Для тех, кто только что наткнулся на этот вопрос и запутался, excellent answer от Simon East объясняет это хорошо.

В Upgrade-Insecure-Requests: 1 заголовок, используемый, чтобы быть HTTPS: 1in the previous W3C Working Draft и был переименован спокойно на Chrome до изменения стали официально приняты.

(Этот вопрос был задан во время этого перехода, когда не было никакой официальной документации по этому заголовку и Chrome стал единственным браузером, который послал этот заголовок.)

+1

Firefox делает это слишком. – dakab

+0

Должно быть новое; Сначала я разрабатываю Firefox, и этот заголовок определенно не был отправлен из Firefox в прошлом году. – user193130

ответ

244

Короткий ответ: он тесно связан с заголовком Content-Security-Policy: upgrade-insecure-requests ответа, что браузер поддерживает его (и на самом деле предпочитает).

Потребовалось 30 минут Googling, но я, наконец, нашел его погребенным в спецификации W3.

Путаница происходит потому, что заголовок в спецификации был HTTPS: 1, и это, как Chromium реализован, но после этого broke lots of websites that were poorly coded (особенно WordPress и WooCommerce) команда Chromium извинились:

«Я извиняюсь за я по-видимому недооценил влияние, основанное на обратной связи во время dev и бета ».
- Mike West, в Chrome Issue 501842

их исправление было переименовать его в Upgrade-Insecure-Requests: 1, и с тех пор спецификации были обновлены, чтобы соответствовать.

В любом случае, вот объяснение от the W3 spec (as it appeared at the time) ...

Поле заголовка запроса HTTPS HTTP посылает сигнал на сервер выражающее предпочтение клиента для шифрования и аутентификации ответа, и что она может успешно провести обновление нестабильного-запросы директивы для того, чтобы это предпочтение как можно более бесшовное.

...

Когда сервер обнаруживает это предпочтение в заголовках НТТР-запроса, он должен перенаправить пользователя на потенциально безопасного представления запрошенного ресурса.

Когда сервер встречает это предпочтение в заголовках запроса HTTPS, он должен включать заголовок Strict-Transport-Security в ответе, если хост запроса HSTS-безопасен или условно HSTS-safe [RFC6797].

+1

Я не понимаю. Я 'a.com' и перенаправляю вас на' b.com', предоставляя этот заголовок 'b.com' и отправляя некоторую информацию. Если вы не находитесь под защищенным каналом на 'b.com', может произойти обнюхивание, потому что я отправил данные на' b.com' вместе с моим запросом. Можете ли вы привести нас к простому сценарию того, как сделать подключения более безопасными для пользователей? –

+0

@SaeedNeamati В очень строгой перспективе это не делает ничего более безопасного. Если у вас есть обычные требования безопасности, вам необходимо сначала убедиться в том, что вы подключаетесь через HTTPS, а не полагаетесь на это. При этом я бы описал это в контексте идеи «[Доверие к первому использованию] (https://en.wikipedia.org/wiki/Trust_on_first_use)», которое * помогает * пассивно. – tne

+1

Я вижу это скорее как желание клиента, чем инструмент безопасности. Это похоже на заголовок «DNT», сервер может игнорировать его, но при этом он выражает желание клиента. – DUzun

0

Это объясняет всю вещь:

HTTP-Content-Security-Policy (CSP) обновление-небезопасные-запросов директива предписывает агентам пользователей для лечения всех небезопасных URL-сайта; (те служили через HTTP), как если бы они были заменены защищенными URL-адресами (которые обслуживались через HTTPS). Эта директива предназначена для веб-сайтов с большим количеством небезопасных устаревших URL-адресов, которые должны быть перезаписаны .

Директива upgrade-insecure-requests оценивается до блочно-смешанного содержимого, и если она установлена, последний фактически является no-op. Рекомендуется установить одну директиву или другую, но не .

директива обновления нестабильных-запросы не будет гарантировать, что пользователи посещает сайт с помощью ссылок на сторонних сайтах будут обновлены до HTTPS для навигации верхнего уровня и, таким образом, не заменяет Strict-транспортно- Security (HSTS), который все равно должен быть установлен с соответствующим максимальным возрастом, чтобы пользователи не подвергались атак с защитой SSL.

Источник: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests