Время прочтения: 3 мин.

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

Данные заголовки указывают браузеру на необходимость включения тех или иных механизмов повышения безопасности при посещении пользователем веб-сайтов. Проблемы некорректной настройки заголовков входят в шестое место — А6 «Небезопасная конфигурация» самой актуальной на текущий момент версии рейтинга OWASP TOP 10 2017, в котором отражены наиболее критичные уязвимости веб сайтов. Среди важных заголовков безопасности можно отметить следующие:

1)Заголовок Strict-Transport-Security — предотвращает риск реализации атаки «понижение протокола» с целью открытия веб-ресурса в браузере пользователя по незащищенному протоколу HTTP и последующего прослушивания/модификации трафика.

2)Заголовок Expect-CT — защищает от проведения атаки с подменой сертификата и последующего прослушивания/модификации трафика.

3)Заголовок X-Frame-Options — предназначен для защиты от атаки Clickjacking, целью которой является скрытное для пользователя совершение действий на атакуемом ресурсе.

4)Заголовок X-XSS-Protection — минимизирует риск проведения атаки XSS с целью выполнения в браузере пользователя произвольного скрипта.

5)Заголовок Content-Security-Policy — предназначен для создания «белого списка» ресурсов, с которых веб-сайту разрешено загружать контент, что позволяет защищаться от ряда клиентских атак (Например : XSS, Clickjacking, CSRF, CSTI и т.д.)

6)Заголовок X-Content-Type-Options — предназначен для запрета браузеру переопределять тип загружаемого контента, что помешает злоумышленнику осуществить внедрение вредоносного кода.

Для сбора заголовков с веб-ресурсов организации возможно использовать широко известную и часто используемую библиотеку requests языка программирования python. Далее приведен пример простого скрипта:

import requests
import pandas as pd

df = pd.DataFrame(columns = ['url','strict-transport-security','expect-ct','x-frame-options','x-xss-protection','content-security-policy','x-content-type-options'])
df['url'] = ['http://site1, 'http://site2']
for i in df.index:
    req = requests.get(df['url'].loc[i], verify = False)
    for j in req.headers:
        if j.lower() in df.columns:
            
            df[j.lower()].loc[i] = req.headers[j]
df.fillna(' ' , inplace=True)          
df.to_excel('result.xlsx')

Скрипт собирает заголовки с заданных веб-ресурсов и сохраняет результат в файл.

Результат отработки скрипта выглядит следующим образом:

Данный файл удобно использовать для последующего анализа с целью определения корректных и максимально безопасных настроек заголовков безопасности для того или иного ресурса с учётом логики его работы и функционала. При этом, возможно руководствоваться такими ресурсами как OWASP Secure Headers Project, Mozilla MDN Web Docs и т.д., которые описывают различные настройки заголовков безопасности. Следует отметить, что необходимо проверить как наличие заголовков, так и корректность их настроек.

Своевременное выявление и корректировка заголовков веб-ресурсов позволяют повысить защищённость посетителей данных сайтов организации, а значит минимизировать риски перехвата/подмены критичных данных посетителей, кражи данных авторизации, вирусного заражения и т.д.