Content security policy: защита от inline скриптов

Автор: SKGROUPS Проверено редакцией Время чтения: 4 мин SEO продвижение

Content Security Policy (CSP) – это мощный механизм безопасности, который позволяет веб-разработчикам контролировать ресурсы, которые браузер может загружать для конкретной страницы․ Основная цель CSP – смягчить и предотвратить различные типы атак, включая Cross-Site Scripting (XSS)․ В этой статье мы подробно рассмотрим, как CSP помогает защититься от inline скриптов, почему это важно и как правильно настроить политику․

Почему inline скрипты опасны?

  • Легко внедрить XSS: Злоумышленник может внедрить вредоносный inline скрипт через уязвимости в веб-приложении, например, через незащищенные формы ввода․
  • Обходят некоторые защиты: Некоторые механизмы защиты от XSS могут быть неэффективны против inline скриптов․

Поэтому, одним из наиболее эффективных способов защиты от XSS является запрет на использование inline скриптов с помощью CSP;

Как CSP блокирует inline скрипты?

CSP использует директивы, которые указывают браузеру, какие источники ресурсов разрешены для загрузки․ Для блокировки inline скриптов используется директива script-src․ Чтобы запретить все inline скрипты, необходимо установить значение 'none' для этой директивы:

Content-Security-Policy: script-src 'none';

Эта политика указывает браузеру, что загружать скрипты из каких-либо источников, включая inline скрипты, запрещено․ Любые попытки выполнить inline скрипт будут заблокированы браузером․

Пример использования CSP для блокировки inline скриптов

<html>
<head>
<title>Пример</title>
</head>
<body>
<button onclick=»alert(‘XSS!’)»>Нажми меня</button>
<script>
console․log(‘Inline script’);
</script>
</body>

Если вы добавите следующую директиву CSP в заголовок ответа сервера:

Content-Security-Policy: script-src 'none';

Браузер заблокирует выполнение как атрибута onclick кнопки, так и inline скрипта внутри тега <script>․ В консоли разработчика браузера вы увидите сообщения об ошибках, указывающие на нарушение политики безопасности․

Разрешение скриптов из доверенных источников

Полный запрет на inline скрипты может быть слишком строгим для некоторых приложений․ В этом случае можно разрешить загрузку скриптов только из доверенных источников, используя директиву script-src с указанием этих источников:

Content-Security-Policy: script-src 'self' https://example․com;

В этом примере:

  • 'self' разрешает загрузку скриптов с того же домена, что и текущая страница․
  • https://example․com разрешает загрузку скриптов с домена example․com

Браузер будет загружать скрипты только из этих источников, а все остальные, включая inline скрипты, будут заблокированы․

Использование nonce и hash

В некоторых случаях может потребоваться разрешить выполнение определенных inline скриптов․ Для этого можно использовать nonce (number used once) или hash․

Nonce

Nonce – это случайная строка, которая генерируется на сервере для каждого запроса и добавляется в директиву script-src и в атрибут nonce тега <script>:

Content-Security-Policy: script-src 'nonce-1234567890';
<script nonce="1234567890">
 console․log('Allowed inline script');
</script>

Браузер выполнит только те inline скрипты, у которых атрибут nonce совпадает со значением, указанным в директиве script-src

Hash

Hash – это криптографическая хеш-функция, которая применяеться к содержимому inline скрипта․ Затем этот хеш добавляется в директиву script-src:

Content-Security-Policy: script-src 'sha256-YOUR_HASH_VALUE';

Браузер выполнит только те inline скрипты, у которых хеш совпадает со значением, указанным в директиве script-src

Рекомендации по внедрению CSP

  • Начните с report-only mode: Сначала настройте CSP в режиме отчета (Content-Security-Policy-Report-Only), чтобы отслеживать нарушения политики без блокировки ресурсов;
  • Постепенно ужесточайте политику: Начните с более мягкой политики и постепенно ужесточайте ее, добавляя новые ограничения․
  • Тщательно тестируйте: Перед внедрением CSP в production, тщательно протестируйте ее, чтобы убедиться, что она не ломает функциональность вашего приложения․
  • Используйте инструменты для валидации: Существуют онлайн-инструменты, которые позволяют проверить правильность настройки CSP․