У нас много игровых сайтов, среди которых я принимаю эксклюзивные игры на своем сервере, и я не хочу получать доступ к своим играм другим сайтам с моего сервера. Я хочу ограничить их доступ к моему контенту с моего сервера.
Например, предположим, что у меня есть веб-сайт под названием www.abc.com
, на исходном пути, например www.abc.com/games/abcgame.swf
в котором я разместил свои эксклюзивные игры. Поскольку я хочу, чтобы другие владельцы сайтов не имели доступа к этому контенту. Если они украдут этот URL и попытаются получить доступ, я хочу показать какое-то пользовательское сообщение, например «Игра не найдена» или somthig, как «Пожалуйста, посетите сайт www.abc.com
чтобы играть в эту игру» и т. Д.
Может ли кто-нибудь идеи реализовать эту функцию?
Первым решением является использование заголовка X-Frame-Options
для предотвращения загрузки вашей страницы в iframe. X-Frame-Options
могут указывать одно из двух значений: SAMEORIGIN
, который разрешает только iframe из одного источника, чтобы отображать это содержимое, и deny
, что предотвращает выполнение любого iframe. НО этот заголовок не является частью спецификации HTTP и был представлен Microsoft, поэтому не все браузеры поддерживают этот заголовок. Пример X-Frame-Options
:
X-Frame-Options: SAMEORIGIN
Если некоторые старые браузеры не поддерживают заголовок X-Frame-Options
. Вы можете попробовать технику под названием FrameKiller . Однако есть ограничения, как указано в этой ссылке.
Пользовательский агент не поддерживает JavaScript.
Пользовательский агент поддерживает JavaScript, но пользователь отключил поддержку.
Поддержка JavaScript агента пользователя ошибочна или частично реализована.
Идея заключается в использовании javascript для определения того, загружена ли ваша страница в iframe. Существует множество способов реализации сценария убийцы кадров.
Для вашего требования вы можете реализовать сценарий убийцы кадров следующим образом: попробуйте обратиться к родительскому окну, чтобы прочитать окно. Если они включают вашу страницу внутри своего iframe, код будет генерировать исключение (междоменное)
Пример кода:
window.onload = function(){ try { if (window.parent && window.parent.location.hostname !== "www.abc.com"){ throw new Error(); } } catch (e){ alert("Please visit www.abc.com to play this game."); //You could do whatever you want here } }
if (window.top != window.self) { window.top.location = window.self.location; }
Сначала он проверяет, что самый верхний кадр – это сам кадр или нет, если он не изменяет кадр верхнего уровня на этот. это javascript.
Выполнение этого с помощью JavaScript ограничено тем, как он будет ограничивать контент на уровне браузера. Возможно, вам лучше mod_rewrite
Apache mod_rewrite
для более эффективного блокирования контента на уровне сервера, как описано здесь .
Например, этот код можно разместить в файле .htaccess
если ваш сервер поддерживает его. Я использую www.abc.com
как пример и соответствующие swf
и fla
файлы в качестве примера:
RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?abc.com/.*$ [NC] RewriteRule ^.*\.(swf|fla)$ - [F]