Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > обойти запрет доступа к содержимому iframe


Автор: Alx 26.2.2007, 02:51
привет всем)
в iframe грузится контент с другого сервера. как получить его document.body.innerHTML?
пишет "Отказано в доступе". сам скрипт у меня на локалке

Автор: Sardar 26.2.2007, 11:43
Никак. Тебе это никогда не будет нужно.
Пиши плагин к лисе (MyIE и т.д.), он имеет доступ до любой страницы.

Автор: Alx 26.2.2007, 16:37
Цитата(Sardar @  26.2.2007,  11:43 Найти цитируемый пост)
Тебе это никогда не будет нужно.

почему? я отправляю запросы на тот сервер, мне нужно получить ответ...

Автор: Sardar 26.2.2007, 21:02
Цитата(Alx @  26.2.2007,  15:37 Найти цитируемый пост)
почему? я отправляю запросы на тот сервер, мне нужно получить ответ... 

Это не безопасно, т.к. в запросе ты можешь отослать инфу о куках и прочее. Впрочем понятие "безопасно" очень растяжимо, ту же инфу можно положить в URL с картинкой или в любой фрейм. Прочесть нельзя, т.к. человека по простоте душевной можно заставить зайти в банк с другого домена, там он получит страницу банка во фрейме. Если бы доступ был бы, то можно украсть пароли и прочую вводимую инфу, что ни тебе, ни мне не нужно.

Автор: Alx 27.2.2007, 00:15
понятненько, спасибо)

Автор: Alex13 11.3.2007, 08:53
Sardar, то есть кросс-браузерного решения не существует? :(

Автор: Sardar 12.3.2007, 11:08
Нет. Если в каком браузере и можно провернуть подобное, то это явно не безопасная бродилка и современем к ней выйдет патч, закрывающий эту дыру. Не надейся, IE7 залатанный хорошо smile

Как уже говорил, многие браузеры позволяют писать плагины, фильтры и прочие примочки на JS. Подобная штука имеет полный доступ до страницы. Для IE пользователей можно попросить  поставить MyIE, в котором плагины писать очень просто.

Автор: Alex13 13.3.2007, 10:27
Sardar, да не, на ИЕ7 я чихать хотел. Просо хотелась необлшого бота для онлайн игрушки на JS написать, а тут задача самым подлым образом усложнилась:(

Ну да ладно, firefox+xpi рулятsmile

Автор: JSman 16.3.2007, 01:13
ну мне думается, что на твоем серваке точно пашет что-то типа пхп или перл, ну пусть и отправляются данные в пхп твоего домена и делай с ним все что хочешь. вопрос не к js. это факт. а там тебе и кроссбраузерность будет и все такое

Автор: Alex13 17.3.2007, 15:08
JSman, вопрос именно по JS. Мне захотелось написать бота для одной браузерной онлайновки (как небольшое упражнение) и по некоторым причинам хочу написать именно на JS.

Автор: lonli 31.3.2007, 01:00
Цитата

Никак. Тебе это никогда не будет нужно.
Пиши плагин к лисе (MyIE и т.д.), он имеет доступ до любой страницы. 
 
Sardar , ты уверен?
У меня не получается.
Код

...

trW=window.open(nU, "myW", "toolbar=1,width=300,height=100");
trW.document.open();
println(trW.document.innerHTML+'aaa');

...

function println(inp){
output.innerHTML=output.innerHTML+inp+"<br>";
}

начиная с trW.document.open(); ничего не делает, сообщения об ошибке не выдаёт

Код

...
  trW=window.open(nU, "myW", "toolbar=1,width=300,height=100");
  setTimeout("start2()",4000);
...
function start2(){
  println('a');
  trW.document.open();
  println('b');
  println(trW.document.innerHTML);
}
function println(inp){
  output.innerHTML=output.innerHTML+inp+"<br>";
}


после вывода а выводит в строку состояния "Script Error!".
Страницу в обоих случаях нормально загружает.
Может мне настройки какие поменять?
Код находится в файле .js указанном в plugin.ini

Автор: Sardar 31.3.2007, 01:14
lonli, работай с текущей страницей, а не открывай новую. Так например плагин, восстанавливающий мышь работает в стандартной поставке. Идея в том, что пользователь видит страницу и сам кликает передавая управление.

Автор: lonli 31.3.2007, 12:35
Спасибо.
Код плагина похоже работает как часть той страницы, которая была активна, когда был запущен плагин.
Соответественно можно создавать новые окна с url того же домена и управлят их содержимым.
А вот как на счёт других доменов? Можно с их содержимым программно работать?
Или необходимо вручную загрузить страницу и для неё опять запустить плагин?
Спрашиваю из чистого интереса.

Автор: Sardar 31.3.2007, 14:55
Цитата(lonli @  31.3.2007,  11:35 Найти цитируемый пост)
Или необходимо вручную загрузить страницу и для неё опять запустить плагин?

Да, только так. Иначе можно было бы писать плагины шпионы и подобное.

Автор: Alx 18.7.2007, 04:29
неужели совсем никак добиться взаимодействия между ифреймом и главным окном? :(
у меня такая задача.. есть два моих файла: главное окно и ифрейм, но они расположены на разных хостах.. при наведении мышки на ифрейм из него должна передаться переменная в гланое окно. каким-то образом.. может можно как-то из фрейма к родительскому окну обращаться? у меня не получается(
едиственное что приходит в голову - Буфер обмена.. навел, скопировалось, убрал курсор - вставилось.. только это не кроссплатформенно..

Автор: korchasa 18.7.2007, 10:19
Цитата(Alx @ 18.7.2007,  04:29)
неужели совсем никак добиться взаимодействия между ифреймом и главным окном? :(
у меня такая задача.. есть два моих файла: главное окно и ифрейм, но они расположены на разных хостах.. при наведении мышки на ифрейм из него должна передаться переменная в гланое окно. каким-то образом.. может можно как-то из фрейма к родительскому окну обращаться? у меня не получается(
едиственное что приходит в голову - Буфер обмена.. навел, скопировалось, убрал курсор - вставилось.. только это не кроссплатформенно..

Проще использовать proxy page, которая будет расположена на том же хосте, что и активная страница, чем придумывать извращенные способы обхода систем безопасности. Если, конечно, есть возможность использовать серверные языки. 

Автор: Alx 18.7.2007, 10:49
korchasa, а можно поподробнее?

Автор: korchasa 18.7.2007, 11:05
Цитата(Alx @ 18.7.2007,  10:49)
korchasa, а можно поподробнее?

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

Автор: Alx 18.7.2007, 11:56
korchasa, о.. а можно тогда пример?

Добавлено через 6 минут и 27 секунд
смысл фактически заключается в том, чтобы узнать навел ли пользвотель мышь на определенный элмент во фрейме. он специально расположен на другом хосте, чтобы было нельзя сделать это программно из адресной строки главного окна. но когда мышь будет наведена (фрейм сам определит это), надо как-то сообщить об этом главному окну.. любым способом.. хоть удалить нафик этот фрейм.. лишь бы главное окно заметило изменения..

Автор: 12345c 18.7.2007, 15:27
Можно (в IE) перехватить ошибку Access Denied по onerror, но сомневаюсь, что будет возможно программно удалить фрейм. Доступ к фрейму будет заблокирован на всё время его существования, даже если свой домен туда впишешь.

Автор: JSman 19.7.2007, 22:16
так эти 2 разных хоста тебе принадлежат?

Автор: Alx 19.7.2007, 23:27
JSman, 
ну как бы да..

я кстати заметил, что у окна есть доступ к self.parent.frames может с этим поколдовать?

Автор: JSman 20.7.2007, 00:04
нет. смотри.

      для решения проблемы есть 2 способа на мой взгляд. 
1) как я предлагал, серверное решение
2) в главном фрейме при событиии копируешь в клипбоард в определенном формате типа текст, например " data^varname^vardata ". а в другом фрейме кидаешь таймер на проверку клипбоарда и применяешь

Автор: Alx 20.7.2007, 00:22
JSman, ну клипбоард это только в винде будет работать.. а можешь поподробнее рассказать про серверное решение?

Автор: JSman 20.7.2007, 00:31
если у тебя чужой сервак в главном фрейме, то копируй содержимое вебстраницы с помощью php. и отображаешь ее как будто это чужой сайтик. но ты имеешь доступ к dom. да, точно, еще не забудь поставить элемент <base href="адрес вебстранички, которую копируешь" />

Добавлено через 3 минуты и 32 секунды
по такому принципу я даже html шпиону в одно время писал, чтобы проверить кто, что делает у меня на компе))

Автор: Alx 20.7.2007, 00:43
JSman, 
ты меня запутал smile
Цитата(JSman @  20.7.2007,  00:31 Найти цитируемый пост)
если у тебя чужой сервак в главном фрейме

чужих нет, все свои.

Цитата(JSman @  20.7.2007,  00:31 Найти цитируемый пост)
копируй содержимое вебстраницы с помощью php

какой вебстраницы? главной или из ифрейма?

Автор: SelenIT 20.7.2007, 00:49
Alx, сорри, что встреваю, но можно уточнить смысл вот этого?
Цитата(Alx @  18.7.2007,  11:56 Найти цитируемый пост)
он специально расположен на другом хосте, чтобы было нельзя сделать это программно из адресной строки главного окна.

От чего это защита?

Автор: JSman 20.7.2007, 01:18
хе, решил еще раз прочитать вообще о чем речь идет))

Цитата(Alx @  26.2.2007,  02:51 Найти цитируемый пост)
привет всем)в iframe грузится контент с другого сервера. как получить его document.body.innerHTML?пишет "Отказано в доступе". сам скрипт у меня на локалке

итак, если исходить из конкретного поста, то решение такое

создай файл index.hta
Код

<head>
<hta />
<script>
 window.onload = function () {
alert(frames[0].document.body.outerHTML);

}
</script>
</head>
<body>
<iframe src="http://yandex.ru" id="ooo" application="yes"></iframe>
</body>


запусти

-------------------------------------------------------------------------------


давай так) чтобы я не запутывал, объясни мне по-детски, что конкретно ты хочешь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)