0
<< предыдущая заметкаследующая заметка >>
12 апреля 2014
Что за хуйня новая с ифреймами?!

UPD: Ну понятно, разобрались. Это, значит, защита от хака, причем в случае с авторизацией приложения Фейсбука — необходимая по определению. У меня, правда, в заначке был личный способ обхода браузерных политик с подменой своей страницы на чужую, нашел его случайно, и вроде даже год назад во всех браузерах он работал... но применять его не буду ;) В общем, открывается новое окно скриптом, закрывается тоже скриптом, обращается к главной странице тоже скриптом (это когда Фейсбук отработал и редиректнул окно со своей страницы на мою указанную). Проблема в том, что браузеры блокируют автоматические окна. Поэтому в большинстве браузеров открыть новое окно скриптом нельзя, а надо вывести пользователю кнопку или ссылку и попросить нажать рукой. Всё, что нажато рукой вниз по процедуре воспринимается браузером как легальное новое окно, и тогда оно открывается. Маразм, но будем так действовать.


Как выясняется, теперь (с какой радости?! с каких это пор?!) нельзя открывать в iframe многие страницы:

Еще ладно Opera — она (на скриншоте выше) хоть пишет суть проблемы и даже предлагает как-то ее решить. А Firefox, например, просто рисует пустое окно.

Вы спросите, зачем открывать подобные страницы в iframe? Представьте себе, Фейсбук требует авторизацию по своему протоколу — типа ему хочется показать пользователю свою страницу, там попросить пользователя залогиниться, либо нарисовать ему кнопку «разрешить приложению это» и всё такое, и только поизгалявшись, выдаст ключ. И я совершенно не представляю, как эту авторизацию выполнить без iframe. Потому что иначе придется уйти с основной страницы, а там, может, распахнуты кучи меню, в формах данные незаписанные, идет параллельный автопостинг аяксом во многие другие соцсети и вообще основная страница занята важными делами, и ей совершенно не улыбается бросить всё и кидать браузер на Фейсбук решать его дебильные проблемы.

Как вы думаете, что это за новомодная хуйня появилась? И как ее обойти? Могу я, например, открыть в браузере новое окно, а потом его закрыть?

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий
Linux Firefox
 Пенза
4
0
m1kc
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
> что это за новомодная хуйня появилась?

Это заголовок "X-Frame-Options: DENY".
Linux Firefox
 Санкт-Петербург
0
0
SunChaser
это давно такое есть, просто раньше это не заголовком делали, а джаваскиптом
Linux Ubuntu Safari Chrome
 Белоруссия
2
0
degifted
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Это сделано специально чтобы адресная строка всегда была навиду, когда вводится пароль при аутентификации. Иначе как узнать, что интерфейс логина в фейсбук не открылся с левого сайта?
Windows Firefox
 Москва
3
0
miyuki
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Это защита от атаки типа "Clickjacking". По этому слову легко гуглится описание. Но, если вкратце, суть такова: кто-то вставляет в iframe страницу (для примера) фейсбука с каким-нибудь своим постом и/или группой, а над фреймом размещает плеер с видео с котиками (ну или порнухой), причём так, чтобы большая кнопка play на видео оказалась как раз над кнопкой "like" с нужным постом на фейсбуке. Делается всё так, чтобы iframe с фейсбуком вообще не был виден. Потом людей как-то заманивают на эту страницу, они нажимают на play, а заодно (сами того не подозревая) и на like какой-то левой фигни (сработает, если пользователь залогинен в фейсбуке). Вот вам и накрутка.
Linux Firefox
 Москва
0
0
Леонит Каганофф
Окей, но как это обходить? Могу я скриптом открыть новое окно, а затем его скриптом закрыть? Могу я получить скриптом сигнал от iframe о том, что загрузка запрещена? В ряде случаев (если авторизация не требуется) Facebook не выдает свою страницу, а делает редирект на мою с кодом авторизации в параметре, и тогда iframe работает.
Windows Opera
 Санкт-Петербург
0
0
Шура
открыть новое - без проблем. закрыть, думаю, тоже, но там, помнится, были некоторые траблы с идентификацией нужного окна.
Windows Firefox
 Москва
0
0
miyuki
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
"обходить" - наверное никак, потому что у вас "пересеклись пути" со всякими нехорошими людьми, типа фишеров, накрутчиков и прочих, а против их методов и дальше будут бороться. Сразу скажу, я не фронтэнд-разработчик, поэтому хз, можно ли всё это сделать в браузере. По поводу "получить сигнал от iframe", говорят, что нет: https://stackoverflow.com/questions/17250103/how-to-get-ifra[...]
Если я правильно понял, задача такая: пользователь набирает, к примеру, комментарий. Потом он замечает, что не авторизовался и хочет залогиниться на вашем сайте через фейсбуковский API. И хочется после логина вернуть его к форме ввода комментария, не продолбав введённый текст.
Я бы сделал так: при клике на кнопку "залогиниться", мы отправляем POST с введённым текстом и доп. параметром (например "fb_auth=1") на собственный сайт. Всю информацию (на какой странице был пользователь, к чему он писал комментарий, что было в тексте) нужно сохранить в базу, и присвоить ей некоторый ID (а-ля сессии), после этого редиректнуть на facebook. Если я правильно понимаю, facebook после логина сделает редирект обратно на тот УРЛ, который мы укажем (или откуда пришли). В любом, случае, в этом УРЛе должно содержаться ID созданной сессии, и оттуда уже можно вытянуть все нужные нам данные.
Linux Firefox
 Москва
0
0
Леонит Каганофф
Не, неправильно понимаете - задача не о посетителе и не о его логине (эти вопросы давно решены другими средствами). Задача об админе, который хочет сделать кросспостинг заметки в свой аккаунт Фейсбука, Вконтакта, ЖЖ и т.п.

А уводить пользователя со страницы движка - это прошлый век и противоречит концепции движка. У меня в движке все действия (кроме, разумеется, листания между страницами) проводятся БЕЗ перезагрузки страницы при помощи аякса. Это вообще иная идеология. Старая концепция веба со своими бесконечными перезагрузками страниц через POST и GET-запросы должна была умереть еще 10 лет назад, и я не понимаю тех, кто ее пытается сегодня придерживаться.
Linux Ubuntu Firefox
 Чехия
0
0
ДС
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Ну конечно! var bzz = window.open(); bzz.close()
Только если ты откроешь в этом окошке чужой домен, то хрена лысого ты что-нибудь оттуда достанешь, даже тупо bzz.document.location тебе современные браузеры не дадут на чтение.
Linux Ubuntu Firefox
 Москва
0
0
Леонит Каганофф
Не, я уже все сделал. Кажется, именно так. Доставать оттуда ничего не надо - Фейсбук сам понесет по адресу редиректа.
Windows Safari Chrome
 Днепропетровск
0
0
Вася111
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Как Вы сделали?

всего комментариев: 11

<< предыдущая заметка следующая заметка >>