Как исправить смешивание безопасного и небезопасного контента на веб-странице
Этот статья описывает проблему, которая возникает, когда посетители вашего веб-сайта запрашивают безопасную веб-страницу, содержащую небезопасные элементы.
Проблема
Когда посетители вашего веб-сайта запрашивают страницу с использованием безопасного соединения https://, в адресной строке веб-браузера может появиться сломанный замок. Кроме того, они могут получить предупреждение в своем браузере:
- Mozilla Firefox: «Соединение с этим веб-сайтом не является полностью безопасным, поскольку оно содержит незашифрованные элементы (такие как изображения).»
- Microsoft Internet Explorer: «Хотите просмотреть только содержимое веб-страницы, которое было доставлено безопасно? Эта веб-страница содержит контент, который не будет доставлен с использованием безопасного HTTPS-соединения, что может подвергнуть опасности безопасность всей веб-страницы.»
- Google Chrome: «Ваше соединение с example.com зашифровано с использованием шифрования 256 бит. Однако эта страница включает другие ресурсы, которые не являются безопасными. Эти ресурсы могут быть просмотрены другими в процессе передачи и могут быть изменены злоумышленником для изменения вида страницы.»
Причина
Эта проблема возникает потому, что веб-страница содержит гиперссылки на небезопасные элементы. Например, рассмотрим веб-страницу, содержащую следующий HTML-фрагмент:
<a href="http://www.example.com/images/picture.jpg">Просмотреть мою картину</a>
В этом HTML-фрагменте гиперссылка ссылается на небезопасный http:// ресурс (файл .jpg). Если пользователь запрашивает эту страницу, используя https:// соединение, сама страница зашифрована, но связанный с ней файл изображения — нет. В результате страница содержит безопасный и небезопасный контент, и браузер отображает предупреждающее сообщение пользователю.
Эта проблема может возникнуть с любым типом связанного с гиперссылками ресурса: библиотекой JavaScript, файлом CSS и т. д.
Решение
Рассмотрите способы решения этой проблемы:
1: Отправка заголовка Content-Security-Policy непосредственно из веб-сервера
Чтобы решить эту проблему, вы можете отправить заголовок Content-Security-Policy в HTTP-ответе. Этот заголовок указывает веб-браузерам обновлять небезопасные запросы на HTTPS.
Для веб-серверов Apache на Linux добавьте следующие строки в файл .htaccess (или файлы), которые вы используете на своем веб-сайте:
<IfModule mod_headers.c> Header always set Content-Security-Policy "upgrade-insecure-requests;" </IfModule>
2: Отправка директивы Content-Security-Policy из исходных файлов страницы
Как альтернативу, вы можете использовать следующий мета тег в исходных файлах страниц вашего сайта:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">