- PVSM.RU - https://www.pvsm.ru -
Знаете ли вы, что в большинстве случаев уязвимость системы безопасности можно устранить добавив необходимые заголовки ответа?
Безопасность не менее важна, чем содержание или поисковая оптимизация сайта. Тысячи сайтов взламываются [1] из-за ошибок в конфигурации или недостаточной защиты. Если вы владелец сайта или специалист по защите информации, и интересуетесь защитой сайта [2] от кликджекинга, внедрения кода, уязвимостей MIME типов, XSS-атак и т.д., то данная инструкция будет вам полезна.
В этой статье я расскажу о разных заголовках HTTP для использования с различными веб-серверами, сетевой периферией или сетями доставки контента, чтобы повысить уровень защищенности сайта [3].
Если вы пользуетесь SUCURI Cloud WAF [5], то о настройке сервера вручную можете не беспокоиться, большинство параметров уже автоматически включено.
X-XSS-Protection [6]
HTTP Strict Transport Security [11]
X-Frame-Options [16]
Заголовок X-XSS-Protection может предотвратить некоторые XSS-атаки («межсайтовый скриптинг»), он совместим с IE 8+, Chrome, Opera, Safari и Android.
Google, Facebook, Github используют этот заголовок, и большинство консультантов по предупреждению проникновений порекомендуют Вам его использовать.
Всего существует четыре варианта конфигурации:
Значение параметра | Содержание |
---|---|
0 | XSS-фильтр выключен |
1 | XSS-фильтр включен, и, в случае обнаружения атаки, страница подвергается цензуре |
1;mode=block | XSS-фильтр включен, и, в случае обнаружения атаки, предотвращает обработку страницы |
1;report=http://example.com/report_URI | XSS-фильтр включен, и, в случае обнаружения атаки, отправляется отчет о нарушении |
Давайте используем 1;mode=block для следующих веб-серверов.
Добавьте следующую запись в httpd.conf вашего сервера Apache:
Header set X-XSS-Protection “1; mode=block”
Для проверки перезапустите Apache.
Добавьте следующее в nginx.conf в разделе HTTP:
add_header X-XSS-Protection "1; mode=block";
Необходимо перезапустить Nginx, чтобы изменения отразились в заголовке ответа вашего сайта.
Если вы используете MaxCDN [32], то добавить заголовок — проще простого. Зайдите в Edge Rules, нажмите “New Rule” и выберите “Add X-XSS-Protection Header” из выпадающего списка.
Заголовок HSTS (HTTP Strict Transport Security) гарантирует, что весь обмен данными из браузера осуществляется по протоколу HTTPS (HTTP Secure). Это предотвращает попытки обойти HTTPS и перенаправляет все HTTP запросы на HTTPS.
Перед тем, как добавлять этот заголовок, убедитесь в том, что все страницы сайта доступны по HTTPS, иначе они не будут отображаться.
Заголовок HSTS совместим с последними версиями большинства браузеров (IE, Firefox, Opera, Safari и Chrome). Всего есть три варианта конфигурации.
Значение параметра | Содержание |
---|---|
max-age | Интервал (в секундах) для указания браузеру, что запросы следует отправлять только через HTTPS. |
includeSubDomains | Конфигурация распространяется на поддомены. |
preload | Используйте, если хотите добавить домен в предопределенный список HSTS [33]. |
В качестве примера давайте настроим HSTS на год и добавим домен и поддомены [34] в предопределенный список HSTS.
Чтобы использовать HSTS в Apache, добавьте в файл httpd.conf следующую запись:
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Чтобы увидеть результат, перезапустите Apache.
Чтобы настроить HSTS в Nginx, добавьте следующую запись в nginx.conf в директиве Server (SSL):
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
Как всегда, для проверки придется перезагрузить Nginx.
Если вы используете Cloud Flare, то включить HSTS можно всего за пару кликов мыши.
Выберите необходимые вам настройки, и изменения вступят в действие сразу же.
Запустите Диспетчер IIS и добавьте заголовок, перейдя в “Заголовки ответа HTTP” для соответствующего сайта.
Перезапустите сайт.
Заголовок X-Frame-Options позволяет снизить уязвимость вашего сайта для кликджекинг-атак. Этот заголовок служит инструкцией для браузера не загружать вашу страницу в frame/iframe. Не все браузеры поддерживают этот вариант, так что проверьте заголовок на совместимость перед тем, как его добавлять.
Есть три варианта конфигурации.
Значение параметра | Содержание |
---|---|
SAMEORIGIN | Позволяет загрузку контента в frame/iframe только если фрейм и страница, его загружающая, расположены на одном домене. |
DENY | Запрещает загрузку контента в frame/iframe. |
ALLOW-FROM | Допускает загрузку контента в фреймах только для определенного URI. |
Давайте рассмотрим, как добавить конфигурацию “DENY” для запрета встраивания.
Добавьте следующую строку в httpd.conf и для проверки перезагрузите веб-сервер:
Header always append X-Frame-Options DENY
Добавьте следующее в nginx.conf в директиве Server:
add_header X-Frame-Options “DENY”;
Для проверки результатов необходима перезагрузка.
Создайте iRule следующего содержания для соответствующего виртуального сервера:
when HTTP_RESPONSE {
HTTP::header insert "X-FRAME-OPTIONS" "DENY"
}
Перезагружать ничего не нужно, изменения происходят автоматически.
Этот заголовок также можно использовать в WordPress. Добавьте следующее в файл wp-config.php:
header(‘X-Frame-Options: DENY’);
Если вы не хотите вносить изменения в файл, то можете воспользоваться плагином по этой инструкции [36].
Чтобы добавить заголовок, откройте “Заголовки ответа HTTP” для соответствующего сайта.
Чтобы изменения отобразились, нужно перезапустить сайт.
Можно предотвратить атаки с использованием подмены MIME типов, добавив этот заголовок ответа HTTP. Заголовок содержит инструкции по определению типа файла и не допускает сниффинг контента. При конфигурации потребуется добавить только один параметр: “nosniff”.
Давайте посмотрим, как добавить этот заголовок.
Добавьте следующую строку в файл httpd.conf:
Header set X-Content-Type-Options nosniff
Не забудьте перезагрузить веб-сервер Apache, чтобы конфигурация вступила в действие.
Добавьте следующую строку в файл nginx.conf в директиве Server:
add_header X-Content-Type-Options nosniff;
Как обычно, потребуется перезагрузить Nginx для проверки результатов.
Если вы используете WordPress, то вы можете воспользоваться плагином Security Headers [37] для использования этого заголовка.
Откройте IIS и зайдите в раздел «Заголовки ответа HTTP»
Нажмите «Добавить», введите название и значение.
Нажмите OK и перезапустите IIS, чтобы проверить результат.
Сократите риск MITM-атаки (“человек посередине”) с помощью привязки сертификата. Для этого необходимо добавить заголовок HPKP [38] (HTTP Public Key Pinning).
Можно привязать корневой сертификат открытого ключа или промежуточный сертификат. На момент подготовки статьи, поддержка HPKP осуществляется в Firefox и Chrome c алгоритмом хэширования SHA-256 [39].
Есть четыре варианта конфигурации.
Значение параметра | Содержание |
---|---|
report-uri=”url” | Отправить отчет на определенный URL, если привязка не состоялась. Это необязательный параметр. |
pin-sha256=”sha256key” | Определить привязку. |
max-age= | Инструкция для браузера запомнить время в секундах, в течение которого сайт будет доступен только с использованием одного из привязанных сертификатов. |
IncludeSubDomains | Применить в отношении поддоменов. |
В качестве примера давайте рассмотрим заголовок HPKP для facebook.com:
public-key-pins-report-only:max-age=500; pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E="; pin-sha256="q4PO2G2cbkZhZ82+JgmRUyGMoAeozA+BSXVXQWB8XWQ="; report-uri=http://reports.fb.com/hpkp/
Если вы собираетесь использовать это на своем сайте, то рекомендую обратиться к руководству, написанному Scott Helme [40].
Чтобы предотвратить XSS-атаки, кликджекинг, внедрение кода, можно добавить заголовок ответа Content Security Policy (CSP). CSP [41] содержит инструкции о загрузке контента из разрешенных источников.
Не все браузеры поддерживают CSP [42], так что перед использованием придется проверить это. Есть три варианта использования заголовков CSP:
Если вы еще пользуетесь устаревшим вариантом, то стоит задуматься о переходе на обновленный.
Для заголовка CSP можно задать множество параметров, их можно изучить на OWASP [43]. Предлагаю рассмотреть два самых распространенных.
Значение параметра | Содержание |
---|---|
default-src | Загружать с определенного источника все. |
script-src | Загружать с определенного источника только скрипты. |
Рассмотрим разрешение загрузки любого контента с текущего домена для разных веб-серверов.
Добавьте следующую строку в файл httpd.conf и перезагрузите веб-сервер:
Header set Content-Security-Policy "default-src 'self';"
Добавьте следующее в секцию Server в файле nginx.conf:
add_header Content-Security-Policy "default-src 'self';";
Зайдите в «Заголовки ответа HTTP» для соответствующего сайта в Диспетчере IIS и добавьте следующие настройки:
Я надеюсь, что инструкция по использованию заголовков позволит вам повысить безопасность и защищенность вашего веб-приложения. Если вы ищете защищенный IIS веб-сервер, то обратите внимание на WebKnight WAF [44], где можно реализовать вышеуказанные конфигурации и не только.
Последний абзац, ради которого Chandan Kumar пишет эти статьи, а я их перевожу:
будем рады видеть Вас в числе посетителей HOSTING.cafe [45] (поиск виртуальных серверов [46], виртуального хостинга [47] и не только) или POISK.hosting [48] (сборник отзывов о хостерах).
Автор: HOSTING.cafe
Источник [49]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/nginx/212550
Ссылки в тексте:
[1] сайтов взламываются: https://geekflare.com/real-time-cyber-attacks/
[2] защитой сайта: http://incapsula.evyy.net/c/245992/237638/4029
[3] уровень защищенности сайта: http://sucuri.7eer.net/c/245992/212721/3713
[4] проверить совместимость: http://caniuse.com/
[5] SUCURI Cloud WAF: http://sucuri.7eer.net/c/245992/212721/3713?u=https%3A%2F%2Fsucuri.net%2Fwebsite-firewall%2F
[6] X-XSS-Protection: https://habrahabr.ru/company/hosting-cafe/blog/315802/#1
[7] Apache HTTP Server: https://habrahabr.ru/company/hosting-cafe/blog/315802/#2
[8] Nginx: https://habrahabr.ru/company/hosting-cafe/blog/315802/#3
[9] MaxCDN: https://habrahabr.ru/company/hosting-cafe/blog/315802/#4
[10] Microsoft IIS: https://habrahabr.ru/company/hosting-cafe/blog/315802/#5
[11] HTTP Strict Transport Security: https://habrahabr.ru/company/hosting-cafe/blog/315802/#6
[12] Apache HTTP Server: https://habrahabr.ru/company/hosting-cafe/blog/315802/#7
[13] Nginx: https://habrahabr.ru/company/hosting-cafe/blog/315802/#8
[14] Cloud Flare: https://habrahabr.ru/company/hosting-cafe/blog/315802/#9
[15] Microsoft IIS: https://habrahabr.ru/company/hosting-cafe/blog/315802/#10
[16] X-Frame-Options: https://habrahabr.ru/company/hosting-cafe/blog/315802/#11
[17] Apache: https://habrahabr.ru/company/hosting-cafe/blog/315802/#12
[18] Nginx: https://habrahabr.ru/company/hosting-cafe/blog/315802/#13
[19] F5 LTM: https://habrahabr.ru/company/hosting-cafe/blog/315802/#14
[20] WordPress: https://habrahabr.ru/company/hosting-cafe/blog/315802/#15
[21] Microsoft IIS: https://habrahabr.ru/company/hosting-cafe/blog/315802/#16
[22] X-Content-Type-Options: https://habrahabr.ru/company/hosting-cafe/blog/315802/#17
[23] Apache: https://habrahabr.ru/company/hosting-cafe/blog/315802/#18
[24] Nginx: https://habrahabr.ru/company/hosting-cafe/blog/315802/#19
[25] WordPress: https://habrahabr.ru/company/hosting-cafe/blog/315802/#20
[26] Microsoft IIS: https://habrahabr.ru/company/hosting-cafe/blog/315802/#21
[27] HTTP Public Key Pinning: https://habrahabr.ru/company/hosting-cafe/blog/315802/#22
[28] Content Security Policy: https://habrahabr.ru/company/hosting-cafe/blog/315802/#23
[29] Apache: https://habrahabr.ru/company/hosting-cafe/blog/315802/#24
[30] Nginx: https://habrahabr.ru/company/hosting-cafe/blog/315802/#25
[31] Microsoft IIS: https://habrahabr.ru/company/hosting-cafe/blog/315802/#26
[32] MaxCDN: http://tracking.maxcdn.com/c/245992/3982/378
[33] предопределенный список HSTS: https://hstspreload.appspot.com/
[34] поддомены: https://geekflare.com/find-subdomains/
[35] Cloud Flare: https://www.cloudflare.com/
[36] плагином по этой инструкции: https://geekflare.com/wordpress-x-frame-options-httponly-cookie/
[37] Security Headers: https://wordpress.org/plugins/security-headers/
[38] HPKP: https://www.owasp.org/index.php/OWASP_Secure_Headers_Project#Public_Key_Pinning_Extension_for_HTTP_.28HPKP.29
[39] SHA-256: https://geekflare.com/test-ssl-sha1-vulnerability-and-fix/
[40] руководству, написанному Scott Helme: https://scotthelme.co.uk/hpkp-http-public-key-pinning/
[41] CSP: https://content-security-policy.com/
[42] Не все браузеры поддерживают CSP: http://caniuse.com/#feat=contentsecuritypolicy2
[43] OWASP: https://www.owasp.org/index.php/OWASP_Secure_Headers_Project#Content-Security-Policy
[44] WebKnight WAF: https://geekflare.com/webknight-iis-waf/
[45] HOSTING.cafe: https://hosting.cafe
[46] виртуальных серверов: https://vds.menu
[47] виртуального хостинга: https://shared.menu
[48] POISK.hosting: https://poisk.hosting
[49] Источник: https://habrahabr.ru/post/315802/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.