Как я могу предотвратить размещение моего сайта в iframe?
как я могу предотвратить размещение моего сайта в <iframe>
и как я могу позволить только одному сайту поместить его в него?
1 answers
Вы можете проверить, находится ли страница внутри <iframe>
или нет, проверив, является ли window.self
(текущее окно или кадр) и window.top
(окно или родительский кадр) одинаковым:
try {
console.log('Estamos en iframe: ', window.self !== window.top);
console.log('Si nos lo permite CORS, podemos ver la URL:',
window.top.location);
} catch (e) {
/* Las políticas "same origin" impiden que accedamos a window.top */
console.log('Estamos en iframe');
}
Если политики того же источника (same origin) не соблюдаются, то мы не сможем проверить URL родительской страницы, невозможно будет предоставить доступ к некоторым страницам да и к другим нет, если вы не получите доступ с помощью CORS.
Политики одного и того же происхождения они соответствуют, если вы включаете одну страницу внутри другой, если:
Две страницы имеют одинаковое происхождение, если протокол, порт (если указано) и хост одинаковы для обеих страниц. Вы увидите, что это иногда называют кортеж схема / хост / порт" (где "Кортеж"представляет собой набор из трех компонентов, которые вместе образуют целое).
В следующей таблице приведены примеры сравнений origenes для URL
http://store.company.com/dir/page.html
:
- http://store.company.com/dir2/other.html - успех
- http://store.company.com/dir/inner/another.html - Успех
- https://store.company.com/secure.html - ошибка (другой протокол)
- http://store.company.com:81/dir/etc.html - ошибка (другой порт)
- http://news.company.com/dir/other.html - ошибка (другой хост)
Чтобы реализовать CORS в PHP, вам нужно сделать использование заголовка Access-Control-Allow-Origin
, как показано в этом примере:
<?php
/* Aquí comprobamos HTTP_REFERER para ver si permitimos o no el iframe */
if ($_SERVER['HTTP_REFERER'] === 'http://urlpermitida/exacta.html') {
header('Access-Control-Allow-Origin: http://urlpermitida');
}
/* Resto del código de la página */