Почему фреймы считаются опасными и представляют угрозу безопасности? Может кто-нибудь описать пример случая, когда это может быть использовано злонамеренно?
Почему фреймы считаются опасными и представляют угрозу безопасности? Может кто-нибудь описать пример случая, когда это может быть использовано злонамеренно?
Ответы:
Как только вы показываете контент из другого домена, вы в основном доверяете этому домену не обслуживать вредоносное ПО.
В самих фреймах нет ничего плохого. Если вы контролируете содержимое iframe, они совершенно безопасны.
<iframe>
элемент) имеет подходящий стиль и намекает, что iframe содержит ненадежный контент, проблем нет. Конечно, по модулю реальных уязвимостей в браузере. Короче говоря, <iframe>
примерно так же безопасно, как <a href>
.
<iframe>
из того же домена может вызвать угрозу безопасности, если злоумышленник может изменить содержимое скрытого iframe. Это позволит злоумышленнику распространить атаку XSS внутри скрытого <iframe>
на любую страницу вашего сайта, которая ссылается на указанный <iframe>
d-контент. Подробнее см. Stackoverflow.com/a/9428051/334451 .
Этот IFRAME
элемент может представлять угрозу безопасности, если ваш сайт встроен IFRAME
во враждебный сайт . Google "кликджекинг" для более подробной информации. Учтите, что не имеет значения , используете вы<iframe>
или нет. Единственная реальная защита от этой атаки - добавить HTTP-заголовок X-Frame-Options: DENY
и надеяться, что браузер знает свое дело.
Кроме того, элемент IFRAME может представлять угрозу безопасности, если какая-либо страница вашего сайта содержит XSS-уязвимость, которую можно использовать . В этом случае злоумышленник может распространить атаку XSS на любую страницу в том же домене, которую можно убедить загрузить <iframe>
на странице с уязвимостью XSS. Это связано с тем, что контенту из того же источника (того же домена) разрешен доступ к DOM родительского контента (практически выполняется JavaScript в документе «хоста»). Единственные реальные методы защиты от этой атаки - это добавить HTTP-заголовок X-Frame-Options: DENY
и / или всегда правильно кодировать все данные, отправленные пользователем (то есть никогда не иметь уязвимости XSS на вашем сайте - проще сказать, чем сделать).
Это техническая сторона вопроса. Кроме того, существует проблема пользовательского интерфейса. Если вы научите своих пользователей доверять тому, что строка URL-адреса не должна изменяться при переходе по ссылкам (например, ваш сайт использует большой iframe со всем фактическим содержимым), тогда пользователи ничего не заметят в будущем в случае реальной безопасности. уязвимость. Например, у вас может быть XSS-уязвимость на вашем сайте, которая позволяет злоумышленнику загружать контент из враждебного источника в ваш iframe. Никто не мог заметить разницу, потому что строка URL-адреса по-прежнему выглядит идентично предыдущему поведению (никогда не меняется), а контент «выглядит» действительным, даже если он поступил из враждебного домена, запрашивающего учетные данные пользователя.
Если кто-то заявляет, что использование <iframe>
элемента на вашем сайте опасно и создает угрозу безопасности, он не понимает, что это за <iframe>
элемент, или он говорит о возможности <iframe>
связанных уязвимостей в браузерах. Безопасность <iframe src="...">
тега равна <img src="..."
или <a href="...">
до тех пор, пока в браузере нет уязвимостей. И если есть подходящая уязвимость, это может быть возможным , чтобы вызвать его , даже без использования <iframe>
, <img>
или <a>
элемента, так что не стоит рассматривать эту проблему.
Однако имейте в виду, что содержимое из <iframe>
может инициировать навигацию верхнего уровня по умолчанию . То есть содержимому в пределах <iframe>
разрешено автоматически открывать ссылку в текущем местоположении страницы (новое местоположение будет отображаться в адресной строке). Единственный способ избежать этого - добавить sandbox
атрибут без значения allow-top-navigation
. Например, <iframe sandbox="allow-forms allow-scripts" ...>
. К сожалению, песочница всегда отключает все плагины. Например, контент Youtube нельзя изолировать, потому что для просмотра всего контента Youtube по-прежнему требуется Flash-плеер. Ни один браузер не поддерживает одновременное использование плагинов и запрет навигации верхнего уровня.
Обратите внимание, что это X-Frame-Options: DENY
также защищает от атак по побочному каналу производительности рендеринга, которые могут считывать контент из разных источников (также известный как « Pixel perfect Timing Attacks »).
"This is because content from the same origin (same domain) is allowed to access the parent content DOM (practically execute JavaScript in the "host" document)."
следует перефразировать в сторону (родительского) документа, содержащего XSS-уязвимость для (дочернего) документа в iframe?
<iframe>
на странице, она позволяет распространить уязвимость с содержимого в iframe на хост-документ. Вопрос был в том, <iframe>
что это опасно, и если основной документ имеет XSS-уязвимость, вам действительно не нужен этот <iframe>
элемент.
Я предполагаю междоменный iFrame, поскольку, по-видимому, риск был бы ниже, если бы вы контролировали его самостоятельно.
«Опасно» и «Риск безопасности» - не первое, что приходит на ум, когда люди упоминают фреймы… но их можно использовать в атаках с использованием кликджекинга .
iframe также уязвим для кросс-фреймовых скриптов: