как привязать код к определенному домену?
Как привязать код к определенному домену?
Например: определить домен окна самого верхнего уровня и если этого домена нет в списке разрешенных, то прекратить дальнейшее выполнение кода. Пробовал сам решить, но утыкался на кросдоменную защиту используя window.top.location.hostname Может кто-то смог решить данную задачу |
VladUA,
1. Сам скрипт в главном окне ? Или непонятно где? может быть и во фрейме ? Тогда может запретить фрейм ? 2. Располагать два скрипта: Перед фреймом, и во фрейме, скрипт перед фреймом тестирует страницу и передаёт данные во фрейм, к примеру в name, если данных нет - фрейм не работает и ссылка фрейма вываливается(открывает вкладку) в главном окне |
Чтобы определить, исполняется ли скрипт в верхнем окне, надо выполнить проверку window === window.top - так ты узнаешь, что кто-то твою страницу запустил во фрейме. И если при этом ты не можешь простучаться в window.top, то хост чужой - можно тупо затирать свою страницу. А для обхода кроссдоменной безопасности нет универсальных средств - для этого устанавливаются плагины, которые подгружают с разрешения пользователя скрипты глобально (т.е. еще глобальнее, чем window) и позволяют им исполняться на каждой открытой странице.
|
Цитата:
if(this!==top){, и если хост чужой (тестишь через try..catch) мон запустить как Гугол форму со своей сылкой target="_top" в главное окно |
Deff
1. да, сам скрипт только в главном окне. 2. нет возможности распалогать скрипты вне главного окна (предполагается что кто-то может через ифрейм подключать главное окно и показывать на своем сайте, хотелось бы это запретить) demoniqus относительно проверки на вложенность в ифрейм: к сожалению нельзя использовать, т.к. код отдается покупателю и он его может вложить в свою обвертку через ифрейм(ы) ... единственное известно что у покупателя верхний домен будет всегда постоянным, т.е. необходима привязка к домену окна самого верхнего уровня. нашелся параметр document.referrer, похоже с помощью него можно посмотреть URL первого ифрейма в который вложено главное окно. начал делать тесты (данные вывожу в консоль) ТЕСТ 1 главное окно -- http://townden.com/html5/topdomain/v7.html document.referrer=null << оно и понятно что null ТЕСТ 2 главное окно в 1-м ифрейме -- http://angry-animals.net/test/top-domain-v7_2.html <iframe src="http://townden.com/html5/topdomain/v7.html" width="468" height="460"> </iframe>document.referrer=http://angry-animals.net/test/top-domain-v7_2.html << уже интересно :) причем без всяких секюрити запретов :) но возможно с document.referrer есть какие-то нюансы, пока не знаю ТЕСТ 3 главное окно в 1-м ифрейме, а 1-й ифрейм во 2-м ифрейме document.referrer=http://angry-animals.net/test/top-domain-v7_2.html << уже не интересно :( тестировал в http://jsfiddle.net/ используя такой код <iframe src="http://angry-animals.net/test/top-domain-v7_2.html" width="468" height="460"> </iframe> document.referrer случайно всплыл, не исключаю, что есть еще какой-то параметр который окончательно поможет с данным вопросом копаю дальше .... буду благодарен за любые советы/варианты |
Если клиент может обернуть твой скрипт в свои фреймы, тогда просто пройдись до самого верхнего window и сравни их домены с доменом непосредственно того фрейма, в котором запущен твой скрипт (ну и / или со статичным списком допустимых доменов). Примерно так:
var w = window; var d = window.location.href.match(/^(?:[^:]+:\/\/)?([^\/]+)/)[1]; var permittedList = {'yandex.ru': true, 'mail.ru' : true};//Список разрешенных доменов permittedList[d] = true; while ((w = w.parent) != window.top) { if (!(w.location.href.match(/^(?:[^:]+:\/\/)?([^\/]+)/)[1] in permittedList)) { killScript();//Убей всё, что сможешь } } w === window.top && !(w.location.href.match(/^(?:[^:]+:\/\/)?([^\/]+)/)[1] in permittedList) && killScript(); |
Часовой пояс GMT +3, время: 01:35. |