Ограничение доступа IFRAME в PHP - PullRequest
3 голосов
/ 29 октября 2008

Я создаю небольшую веб-страницу с использованием PHP, которая будет доступна в виде IFRAME с нескольких сайтов. Я хочу ограничить доступ к этому сайту, чтобы он работал ТОЛЬКО на «одобренных» сайтах, а не на других сайтах или к которым был получен прямой доступ. У кого-нибудь есть предложения? Это вообще возможно? Сайт PHP будет Apache, а сайты, создающие контент, вероятно, будут .NET.

Просто чтобы уточнить, любой сайт может просматривать страницу, если она есть в iframe на утвержденном сайте. Я хочу заблокировать доступ людей к нему напрямую. Я думаю, что печенье может быть решением, но я не уверен.

Ответы [ 7 ]

1 голос
/ 29 октября 2008

Соскоб экрана может быть возможным решением здесь.

Настройте список доступа на своем сайте, чтобы принимать только запросы, поступающие с веб-серверов утвержденных сайтов, и выдавать им маркер безопасности. Это легкая часть.

Команда разработчиков должна установить сервлет-ретранслятор, чтобы получить ваш контент, а затем отобразить его пользователям (после переписывания любых соответствующих URL).

Это может быть довольно сложным делом, но вы сможете лучше контролировать доступ к сайту. Кроме того, любой выданный вами токен безопасности не будет виден веб-пользователю, поскольку он должен передаваться только между двумя веб-серверами.

1 голос
/ 27 июля 2009

Вы можете MD5 (или зашифровать для большей безопасности) IP-адрес клиента, используя секретную соль + дату и передать ее в качестве параметра в iframe src url. В iframe вы делаете то же самое и проверяете, совпадает ли результат с параметром; если нет, запретить доступ

1 голос
/ 29 октября 2008

Я бы реализовал это так же, как Google реализует AdSense. Вместо того, чтобы они встраивали код iframe на свой сайт, вместо этого им нужно встраивать некоторый javascript, который включает номер учетной записи:

<script type="text/javascript"><!--
myiframe_client = "12345";
myiframe_width = 728;
myiframe_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://www.example.com/scripts/show_iframe.js">
</script>

По крайней мере, таким образом вы можете управлять тем, кто отображает содержимое вашего iframe для каждого аккаунта. Если кто-то посторонний попытается использовать ваш iframe, вы можете отключить учетную запись. Вы также можете проверить свойства документа с помощью javascript (в рамках ограничений безопасности браузера), чтобы предотвратить несанкционированный доступ.

1 голос
/ 29 октября 2008

Думая об этом ... Я не уверен, что это абсолютно безопасно, но вот пример, пока я думаю об этом больше -

Единственный способ сделать это, если вы контролируете сайты, в которые он будет встроен. Если вы управляете ими, вы можете передать зашифрованное время от набора фреймов к фрейму:

 <iframe src="http://yourdomain/frame.php?key=p21n9u234p8yfb8yfy234m3lunflb8hv" />

frame.php затем расшифровывает сообщение, чтобы найти время в небольшой дельте (скажем, 10 секунд). Поскольку frame.php знает, что только приемлемые сайты могли зашифровать время, он знает, что можно показывать себя самому. В противном случае ничего не выводится.

Все остальное, будь то JavaScript или HTTP_REFER, можно подделать, отключить или обойти.

И действительно, с помощью этого URL атакующий сможет показывать ваш кадр где угодно, если пользователь загружает его в течение 10 секунд. Таким образом, злоумышленник просто взломает принятый сайт и схватит ключ. Если эта модель угрозы неприемлема для вас - тогда вы действительно ничего не можете сделать (кроме, может быть, даже более сложного протокола).

1 голос
/ 29 октября 2008

К сожалению, это невозможно.

Используя Javascript, вы можете проверить, встроена ли ваша страница в другой фрейм, но это не будет надежно, поскольку Javascript можно отключить в браузерах некоторых людей.

Например, вы можете запустить следующий javascript, чтобы переписать вашу страницу, если это так:

if (top.location != location) {
  top.location.href = document.location.href ;
}
0 голосов
/ 29 октября 2008

Спасибо за все замечательные идеи! Я думаю, что решением, с которым я собираюсь пойти, является файл cookie сеанса, установленный утвержденным сайтом "iframing". Кто-то действительно решил, что все еще сможет получить контент, но я думаю, что смогу предотвратить большинство злоупотреблений, придумав приличный «секретный» алгоритм, основанный на некоем общем секрете с обеих сторон, и назначив утвержденный сайт сессионный cookie, который будет прочитан моим сайтом PHP. Если файл cookie действителен и соответствует моим критериям, я покажу содержимое, в противном случае я не буду. Информация, которую я защищаю, не является критически важной, я просто пытаюсь предотвратить злоупотребление ею.

0 голосов
/ 29 октября 2008

Не могли бы вы проверить $_SERVER['HTTP_REFERER'], чтобы убедиться, что он содержит определенную строку?

if (strpos('http://example.com', $_SERVER['HTTP_REFERER']) !== false) {
    // allowed
}

В вашем случае вы можете сначала проанализировать адрес, а затем проверить, если in_array().

Это не будет дураком, так как люди могут подделать рекомендателя, НО может быть, вы могли бы использовать какой-то ключ 1 использования с другим обменом данными между 2 серверами. Если ключ был использован, то нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...