Обработка проблем безопасности iframe (например, "X-Frame-Options" - "SAMEORIGIN")

Внутри моего приложения есть iframe, который может открывать любые веб-страницы (99% времени того же источника). Но пользователь может щелкнуть ссылку внутри iframe и перейти на внешний сайт. Мне удалось определить, является ли веб-сайт того же происхождения или нет, но запрос на веб-сайт, такой как " https://www.google.ca/", выдает следующую ошибку:

Отказался отображать " https://www.google.ca/" во фрейме, поскольку для параметра "X-Frame-Options" установлено значение "SAMEORIGIN".

У меня есть события beforeunload, onerror и onload, связанные с моим iframe, но я не могу справиться с этой проблемой безопасности с помощью объекта события.

1 ответ

Возникла такая же проблема: при загрузке сторонних страниц в мой iframe некоторые из них были заблокированы X-Frame-Options, который не включен в HTML.

ВНИМАНИЕ: работает в CHROME,iPhone,Mozilla Android 4.4.2, НО не работает в FireFox.

Если вы хотите, чтобы эти страницы открывались в новом окне, я управляю ими. Может быть, полезные вещи для кого-то другого, ищущего решение для этого конкретного сценария.

PHP (get_headers) отлично работает для большинства из них, но я сталкивался с несколькими, которые не давали X-Frame-Options непосредственно в HTML-заголовок (автоматическое включение), поэтому get_headers не сработал, и браузер получил это [Загрузка запрещена X-Frame-Options: your_guest_url не разрешает кадрирование из разных источников.]

Мне пришлось добавить ссылку на мою первую страницу, чтобы пользователи могли открыть проблемную страницу в новом окне, щелкнув по ней, и создать промежуточную страницу с помощью JavaScript, значка загрузки и setTimeout ().

firstpage.php [с 'iframe' и 'a' ниже 'iframe']

<?php
foreach(get_headers("http://".$_REQUEST["address"]) as $v) {
    if($v == "X-Frame-Options: SAMEORIGIN" || $v == "X-Frame-Options: DENY") {
    header("location: http://".$_REQUEST["address"]);
    die();
    }
}
?>

<iframe id="iframe-id" src="secondpage.php"></iframe>
<a href=your_guest_url>go to your_guest_url</a>

<script language='javascript'>
setTimeout(function() {
document.getElementById('iframe-id').src = 'your_guest_url';
},500);
</script>

secondpage.php [загружен в iframe]

<div class="loading-info">
    <div id="loading-info" class="loading-info-content">
            <i class="fa fa-3x fa-spinner fa-pulse"></i>
    </div>
</div>

<script>
setTimeout(function() {
document.getElementById("loading-info").innerHTML = "<p'>USE LINK BELOW IFRAME</p>";
},5000);
</script>

Страница без "скрытых" X-Frame-Options загружается через javascript в iframe через 500 мс, проблемная страница не загружается, поэтому вторая страница остается в iframe и выполняет javascript setTimeout();.

Другие вопросы по тегам