Всі статті

Практичні посібники

5 хв читання

Заголовки безпеки HTTP: CSP та HSTS

Простий англійський посібник для CSP, HSTS, X-Frame-Options і Referrer-Policy - що робить кожен заголовок і як перевірити свій сайт за допомогою швидкого сканування.

Від Luca Deguin

Вікно браузера з замком, пов’язаним із заголовками відповідей і екраном.

Ви розгорнули програму. Сторінки завантажуються, форми працюють, і нічого не виглядає зламаним. Потім ви запускаєте сканування, і воно повертається зі списком знахідок про заголовки - і нічого з цього не очевидно.

Це нормальна перша реакція. Заголовки не відображаються на екрані, тому важко сказати, чи вони важливі, чи сканер просто метушиться. У цьому посібнику описано заголовки, які ви найчастіше бачите, що кожен із них насправді робить простою мовою та як перевірити свій без припущень.

Чому заголовки важливі, навіть якщо ваш сайт виглядає добре

Заголовки безпеки - це інструкції, які ваш сервер надсилає браузеру разом із сторінкою. Браузер читає їх і налаштовує, як обробляє ваш вміст: які сценарії можуть запускатися, чи може сторінка завантажуватися поверх звичайного HTTP, чи може інший сайт вставляти її у фрейм.

На сторінці нічого не змінюється. Саме тому ці висновки здаються абстрактними: сайт може виглядати і поводитися ідеально, не маючи набору засобів захисту, які будуть мати значення в день, коли щось піде не так.

Чесна структура така: заголовки зменшують певний клас ризику. Вони самі по собі не роблять сайт безпечним, а чиста перевірка заголовка не доводить, що сайт повністю безпечний. Думайте про них як про один із кількох шарів, і це один із найдешевших шарів, який можна правильно отримати.

Що насправді таке заголовок безпеки

When a browser requests a page, your server responds with the page і блок метаданих, які називаються заголовками відповідей. Ви можете побачити їх самі: відкрийте інструменти розробника свого браузера, перейдіть на вкладку «Мережа», перезавантажте сторінку та натисніть верхній запит. Заголовки тут же.

Заголовки безпеки - це просто ті, які повідомляють браузеру застосувати правило. Some are strict, some are advisory, and all of them are set in your server config, your framework, or your hosting platform - not in your HTML.

Content-Security-Policy (CSP)

CSP повідомляє браузеру, які джерела вмісту дозволено завантажувати на вашій сторінці. Це найпотужніший заголовок тут, і він найбільше лякає людей.

На практиці CSP визначає такі речі, як: сценарії можуть надходити лише з вашого власного домену та однієї довіреної CDN; зображення можуть надходити з будь-якої точки над HTTPS; сторінка не може бути обрамлена іншим сайтом. If something tries to load from a source you did not allow, the browser blocks it and logs the attempt in the console.

CSP is an additional defense against script injection, alongside safe output encoding and sanitization. Це також заголовок, який, найімовірніше, зламає щось, якщо ви налаштуєте його занадто агресивно. Практичний шлях для початківця полягає в тому, щоб почати в режимі лише звітів, подивитися, що було б заблоковано, виправити справжні проблеми, а потім застосувати це.

Strict-Transport-Security (HSTS)

HSTS повідомляє веб-переглядачу спілкуватися з вашим сайтом лише через HTTPS протягом певного періоду. Щойно браузер побачить цей заголовок, він відмовиться встановлювати незахищене підключення HTTP до вашого домену, навіть якщо користувач введе http:// або перейти за старим посиланням.

Коли браузер дізнається політику HSTS, він оновлює запити HTTP перед їх надсиланням. Під час першого відвідування все ще можна використовувати HTTP, якщо домен уже не охоплено записом попереднього завантаження HSTS.

Єдина річ, яку тут потрібно поважати, - це відданість. HSTS запам’ятовується браузером стільки часу, скільки ви вкажете, тому почніть з короткого періоду, поки ви переконаєтеся, що кожен субдомен працює над HTTPS, а потім подовжте його, коли переконаєтеся.

X-Frame-Options

X-Frame-Options контролює, чи може інший сайт завантажувати ваші сторінки у фреймі - an <iframe> на чужій сторінці.

Навіщо дбати? Оскільки фреймування є механізмом клікджекінгу, коли зловмисник накладає на вашу справжню сторінку невидимі або замасковані елементи, щоб користувач клацав те, що він не мав на увазі. Якщо у вашій програмі є будь-яка дія під час входу в систему - кнопка видалення, оплата, зміна налаштувань - ви не хочете розміщувати її в іншому місці.

Загальна установка SAMEORIGIN, що дозволяє вашим власним сторінкам фреймувати одна одну, але блокує всі інші. Якщо ви ніколи не збираєтеся бути підставленим, зазвичай це правильно.

Referrer-Policy

Referrer-Policy вирішує, яка частина вашої URL-адреси передається іншим сайтам, коли користувач клацає посилання з вашої сторінки. Сучасні браузери зазвичай використовують strict-origin-when-cross-origin: повну URL-адресу можна надіслати на запити з однаковим джерелом, тоді як запити HTTPS із перехресним походженням отримують лише джерело. Явно слабша політика може розкрити більше.

Це важливо, оскільки повні URL-адреси іноді містять конфіденційні значення в рядках запиту - маркери, ідентифікатори, адреси електронної пошти, пошукові терміни. Передача їх третій стороні відбувається тихо, і її легко пропустити.

Розумною базовою лінією є надсилання лише джерела або нічого взагалі на міжсайтові запити. Це майже нічого не коштує та усуває випадковий витік даних.

Решта практичного набору

Ще кілька заголовків виникають досить часто, щоб знати їх за назвою:

  • X-Content-Type-Options: nosniff не дозволяє браузеру вгадувати тип файлу, що інакше може перетворити завантажений файл на виконуваний сценарій.

  • Permissions-Policy вимикає функції веб-переглядача, які ви не використовуєте, наприклад камеру, мікрофон або геолокацію.

  • Cross-Origin-Opener-Policy і пов’язані заголовки різного походження ізолюють вашу сторінку від інших, що допомагає стримувати певні атаки.

Вам не потрібні всі вони в перший день. Знання того, що вони роблять, допоможе вам прочитати звіт про сканування без паніки.

Як перевірити свої заголовки за кілька хвилин

У вас є два способи дивитися.

По-перше, маршрут вручну: інструменти розробника, вкладка «Мережа», натисніть запит сторінки та прочитайте заголовки відповіді. Це корисно для підтвердження наявності окремого заголовка та встановлення очікуваного способу.

По-друге, практичний шлях для кількох сторінок: запустіть сканування. Сканер отримує ваш сайт так, як це зробив би браузер, і повідомляє, які заголовки безпеки присутні, які відсутні та що викриває кожна прогалина. Це дає вам пріоритетний список замість стіни необробленого тексту - і він перевіряє сторінки, які ви б не подумали відкрити вручну.

Інструмент загального призначення, як-от безкоштовне полегшене сканування безпеки VICE, позначатиме виявлені заголовки разом з іншими проблемами з доказами, що стоять за кожною з них, щоб ви могли зрозуміти, чому вони були порушені.

Виправте їх, а потім перевірте повторним скануванням

Заголовки живуть у конфігурації, тому більшість виправлень невеликі: додайте рядок до конфігурації вашого сервера, параметр у вашій структурі або опцію на інформаційній панелі вашого хоста. Змінюйте один заголовок за раз і переконайтеся, що сайт все ще працює.

Потім перескануйте. Це крок, який люди пропускають. Редагування конфігурації не означає, що заголовок тепер є правильним на кожній сторінці, і позначити щось як виправлене на інформаційній панелі не те саме, що підтвердити це. Лише нове сканування в тому самому діапазоні покаже вам, що зміни дійсно набули чинності.

Почніть з безкоштовного сканування, подивіться, що насправді роблять ваші заголовки, і виправте найкращі результати по черзі. Це розумний перший прохід - і набагато краща позиція, ніж сподіватися, що за замовчуванням все добре.

Почніть перевірку
безпека вашого сайту.

Знайдіть проблеми, підготуйте виправлення та перевірте зміни.
Зберігайте результати разом для наступного розгортання.

+10 000 просканованих сайтів
Огляд платформи VICE