Руководство по защите и безопасности веб-сайта

Как исправить смешивание безопасного и небезопасного контента на веб-странице

Содержание

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

Проблема

Когда посетители вашего веб-сайта запрашивают страницу с использованием безопасного соединения 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">