Обработка проблем безопасности 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();.