Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.04.2015, 21:52
Новичок на форуме
Отправить личное сообщение для VladUA Посмотреть профиль Найти все сообщения от VladUA
 
Регистрация: 12.12.2013
Сообщений: 3

как привязать код к определенному домену?
Как привязать код к определенному домену?

Например:
определить домен окна самого верхнего уровня и если этого домена нет в списке разрешенных, то прекратить дальнейшее выполнение кода.

Пробовал сам решить, но утыкался на кросдоменную защиту используя window.top.location.hostname


Может кто-то смог решить данную задачу
Ответить с цитированием
  #2 (permalink)  
Старый 20.04.2015, 00:57
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

VladUA,
1. Сам скрипт в главном окне ? Или непонятно где? может быть и во фрейме ? Тогда может запретить фрейм ?
2. Располагать два скрипта: Перед фреймом, и во фрейме, скрипт перед фреймом тестирует страницу и передаёт данные во фрейм, к примеру в name, если данных нет - фрейм не работает и ссылка фрейма вываливается(открывает вкладку) в главном окне
Ответить с цитированием
  #3 (permalink)  
Старый 20.04.2015, 08:41
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 181

Чтобы определить, исполняется ли скрипт в верхнем окне, надо выполнить проверку window === window.top - так ты узнаешь, что кто-то твою страницу запустил во фрейме. И если при этом ты не можешь простучаться в window.top, то хост чужой - можно тупо затирать свою страницу. А для обхода кроссдоменной безопасности нет универсальных средств - для этого устанавливаются плагины, которые подгружают с разрешения пользователя скрипты глобально (т.е. еще глобальнее, чем window) и позволяют им исполняться на каждой открытой странице.
Ответить с цитированием
  #4 (permalink)  
Старый 21.04.2015, 02:14
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от demoniqus
Чтобы определить, исполняется ли скрипт в верхнем окне, надо выполнить проверку window === window.top
if(this!==top){
, и если хост чужой (тестишь через try..catch) мон запустить как Гугол форму со своей сылкой target="_top" в главное окно
Ответить с цитированием
  #5 (permalink)  
Старый 21.04.2015, 13:52
Новичок на форуме
Отправить личное сообщение для VladUA Посмотреть профиль Найти все сообщения от VladUA
 
Регистрация: 12.12.2013
Сообщений: 3

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 случайно всплыл, не исключаю, что есть еще какой-то параметр который окончательно поможет с данным вопросом
копаю дальше .... буду благодарен за любые советы/варианты

Последний раз редактировалось VladUA, 21.04.2015 в 13:58.
Ответить с цитированием
  #6 (permalink)  
Старый 22.04.2015, 10:57
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 181

Если клиент может обернуть твой скрипт в свои фреймы, тогда просто пройдись до самого верхнего 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();

Последний раз редактировалось demoniqus, 22.04.2015 в 12:35.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как скорректировать код чтобы он отрабатывал в каждом div runyugin Элементы интерфейса 0 25.01.2015 18:39
Объясните как работает код wolf_ Ваши сайты и скрипты 0 06.08.2014 23:24
Как вызвать свою функцию из «чужого» кода в Java Script, не переписывая «чужой» код? korobochkin Библиотеки/Тулкиты/Фреймворки 2 19.07.2014 16:17
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25