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

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


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

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

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

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

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
Страницы, которые привлекли мое внимание за последние дни, рекомендую:
2017-11-22 В июне 1982
архив ссылок
Оставить комментарий
Linux Firefox
 Пенза
4
0
> что это за новомодная хуйня появилась?

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

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

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

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