Как разрешить встраивание iframe только для сайтов из белого списка?

У меня есть форма, которую я хочу встроить на веб-сайт, который находится в моем белом списке.

Другие веб-сайты, пытающиеся внедрить его, должны получить только страницу с ошибкой.

<iframe src="https://domain.tld/getForm.php?embed=1&formId=123456"></iframe>

Я надеялся, что смогу использовать $_SERVER['HTTP_REFERER'] в getForm.php для проверки встраиваемого веб-сайта, но это не работает.

Кто-нибудь знает передовую практику или обходной путь?

Заранее спасибо!


person Mr. B.    schedule 14.09.2016    source источник
comment
Вам нужно будет проверить IP-адрес удаленного адреса, отправляющего запрос к getForm.php, однако IP-адреса могут быть подделаны. Посмотрите на $_SERVER ужин глобальный. Я бы подумал, что REMOTE_ADDR будет IP-адресом сайта, выполняющего вызов, но я не уверен на 100%, это может быть просто IP-адрес клиента.   -  person ArtisticPhoenix    schedule 14.09.2016
comment
не могли бы вы найти решение для этого? Я попробовал $_SERVER['HTTP_REFERER'], и он отлично работает, но я где-то читал, что его можно подделать, так что есть ли лучшее решение?   -  person Daniel Soublett    schedule 26.06.2017


Ответы (2)


Большинство браузеров поддерживают заголовок X-Frame-Options.

Этот заголовок предотвратит доступ:

X-Frame-Options: SAMEORIGIN

И этот заголовок, чтобы разрешить доступ:

X-Frame-Options: ALLOW-FROM [uri]

Примеры вариантов:

X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
X-Frame-Options: ALLOW-FROM https://example.com/

Пример в PHP:

<?php header('X-Frame-Options: SAMEORIGIN'); ?>

Вы можете прочитать больше здесь: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

Надеюсь, это немного поможет!

person codelock    schedule 14.09.2016
comment
allow-from устарело - person codesmith; 11.10.2019
comment
Есть ли другой способ разрешить из определенного домена, так как разрешение от устарело. - person Chandan Singh Gadhwal; 02.12.2019

Заголовки Content Security Policy теперь являются рекомендуемым подходом.

Пример из MDN:

// iframe can be embedded in pages on the origin and also on https://www.example.org
Content-Security-Policy: frame-ancestors 'self' https://www.example.org;

Подробнее см.: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors

person Josh Mc    schedule 13.01.2020