Песочница iframe и политика разрешений
Ограничивайте встроенное содержимое с помощью sandbox и Permissions-Policy
«Песочница iframe и политика разрешений» — бесплатный урок HTML Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.
Зачем нужны фреймы-песочницы
Непроверенное содержимое во встроенном фрейме (сторонние виджеты, предварительный просмотр HTML, отправленного пользователем, встроенные игры) не должно обладать всеми возможностями браузера. Атрибут sandbox ограничивает действия фрейма и уменьшает ущерб, если содержимое окажется вредоносным.
Пустая песочница = максимальные ограничения
<iframe sandbox src="..."> без значения применяет все ограничения: запрещает скрипты, формы, всплывающие окна, переходы верхнего уровня и плагины, а также рассматривает фрейм как имеющий уникальный источник. Используйте это как отправную точку и добавляйте только те возможности, которые нужны встроенному содержимому.
Добавление возможностей
Токены песочницы повторно включают отдельные возможности: sandbox="allow-scripts allow-same-origin" разрешает выполнение скриптов и доступ к тому же источнику. Каждый токен ослабляет одно ограничение; сочетайте минимальный набор, действительно необходимый фрейму.
<iframe sandbox="allow-scripts allow-same-origin" src="https://embed.example.com/widget"></iframe>Распространённые разрешения
allow-scripts включает JS. allow-forms разрешает отправку формы. allow-popups включает window.open. allow-same-origin не даёт считать фрейм имеющим уникальный источник (это необходимо для localStorage). allow-top-navigation разрешает переходы в родительском окне.
Опасное сочетание
Сочетание allow-scripts и allow-same-origin для фрейма, который размещён на вашем источнике, предоставляет ему полный доступ к этому источнику — включая возможность удалить собственную песочницу. Сочетайте их только для проверенного содержимого; для непроверенного не предоставляйте доступ к тому же источнику.
Политика разрешений
Политика разрешений (ранее называвшаяся политикой возможностей) управляет тем, какие возможности браузера (камера, микрофон, геолокация, полноэкранный режим, автовоспроизведение) могут использовать страница и её фреймы. Задайте её для родительской страницы: Permissions-Policy: geolocation=() заблокирует геолокацию повсюду.
Разрешение для отдельного фрейма
Атрибут allow у фрейма переопределяет политику родительской страницы для этого фрейма: <iframe allow="camera; microphone"> разрешает ему использовать эти возможности, даже если политика по умолчанию на родительской странице их запрещает.
<iframe
src="https://video-call.example.com"
allow="camera; microphone; fullscreen"
sandbox="allow-scripts allow-same-origin">
</iframe>Перечень разрешений
Спецификации постоянно развиваются и включают камеру, микрофон, геолокацию, акселерометр, гироскоп, магнитометр, платежи, USB, MIDI, полноэкранный режим, автовоспроизведение, режим «картинка в картинке» и ещё десятки возможностей. Проверьте этот список и явно запретите всё, что не нужно вашей странице.
Сообщения о нарушениях политики
Политика разрешений отправляет сообщения о нарушениях на настроенный адрес, подобно адресу отчётов CSP. Используйте это во время перехода: включите строгую политику, следите за тем, что перестало работать, а затем постепенно ослабляйте её для действительно необходимых функций.
Изоляция источника
Для страниц с важными данными задайте Cross-Origin-Opener-Policy: same-origin и Cross-Origin-Embedder-Policy: require-corp. Это изолирует страницу от окон других источников, защищая от атак на основе измерения времени, и позволяет использовать SharedArrayBuffer.
Многоуровневая защита
Песочница + политика разрешений + CSP + COOP/COEP работают совместно. Каждая мера защищает от своего класса атак. Встраивание стороннего содержимого достаточно рискованно, поэтому одной меры недостаточно — сочетайте их, чтобы обход одной меры был остановлен другой.
Тестирование
Используйте панели «Сеть» и «Проблемы» в DevTools, чтобы обнаруживать нарушения ограничений песочницы и разрешений. Многие нарушения происходят незаметно: возможность просто возвращает неопределённое значение или отклоняет обещание. Явно настроенные адреса для отчётов помогают обнаруживать такие случаи в рабочей среде.
Проверка знаний
Почему сочетание разрешений на выполнение скриптов и доступа к тому же источнику потенциально опасно для фрейма, размещённого на вашем источнике?
Итоги
По умолчанию помещайте фреймы в песочницу и добавляйте только нужные содержимому разрешения. Не используйте сочетание разрешений на скрипты и доступ к тому же источнику для непроверенного содержимого. Применяйте политику разрешений, чтобы запретить мощные возможности на всём сайте, а атрибут разрешений фрейма — чтобы выдавать исключения. Для многоуровневой защиты сочетайте это с CSP и COOP/COEP.
Часто задаваемые вопросы
Урок «Песочница iframe и политика разрешений» бесплатный?
Да — полный текст урока «Песочница iframe и политика разрешений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.
Чему я научусь в уроке «Песочница iframe и политика разрешений»?
Ограничивайте встроенное содержимое с помощью sandbox и Permissions-Policy Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать HTML Academy?
Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Песочница iframe и политика разрешений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке HTML Academy?
Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Политика безопасности содержимого: meta http-equiv
- XSS через innerHTML и способы защиты
- Песочница iframe и политика разрешений
- HTTPS и целостность подресурсов