Через window.opener.location мы сможем сделать редирект на, к примеру, фишинговую страницу. Это своего рода tabnabbing, только более продвинутый. Так как жертва меньше всего ожидает подмены страницы, в открытой ранее, доверенной вкладке браузера.
Проблема далеко не новая, но до сих пор актуальная, и как вижу, не многие о ней знают.
Для примера — открываем пост, кликаем по ccылке. Смотрим что случилось с вкладкой, на которой мы открывали данный пост.
Скрыл публикацию в FB ввиду жалоб на надобность восстанавливать доступ к аккаунту после перехода по ссылке (пруф). Можно самому попробовать разместить скрытую публикацию на страницу sli.su/kitten.html либо посмотреть как это работает на хабре
На странице sli.su/kitten.html есть такой код:
window.opener.location = 'https://sli.su/facebook.com/auth.html';
Он создает редирект с ранее доверенной страницы. Это происходит потому, что браузеру никто не сообщил, что открываемая страница не должна иметь доступа к родительской вкладке. На момент публикации без проблем отрабатывает в chrome 50, firefox 45, opera 36.
Таким грешат многие сайты, а некоторые, даже не считают это за проблему «на своей стороне» sites.google.com/site/bughunteruniversity/nonvuln/phishing-with-window-opener
Варианты решения проблемы:
1. Добавить в ссылки:
rel="noopener"
Это так же может быть
rel="nofollow noopener"
2. Открывать все внешние ссылки через свою, промежуточную страницу, на которой должен отработать код:
window.opener = null;
3. Открывать ссылки в новой вкладке через js:
var otherWindow = window.open();
otherWindow.opener = null;
otherWindow.location = targetUrl;
4. Отлавливать все клики по ссылкам и в момент перехода создавать скрытый iframe, через который и делать открытие страницы в новой вкладке. github.com/danielstjules/blankshield — js плагин который, по описанию, решает поставленную задачу (лично не тестировал).
P.S.: В FF не работает rel=«noopener» — habrahabr.ru/post/282880/#comment_8879594. Вместо него можно использовать rel=noreferrer.
Комментарии (129)
FrozenInternet
03.05.2016 17:58+15Хорошо бы писать источник, откуда берете информацию.
mathiasbynens.github.io/rel-noopener
enabokov
03.05.2016 18:03+1Есть у одних решений какие-то преимуществ/недостатки перед другими? Вот мне больше нравится первое за простоту. Зачем мне может понадобиться использовать какое-то другое решение?
ganjar
03.05.2016 18:32+1Другие варианты больше подходят тем, у кого, к примеру, много ссылок, ссылки в контенте и тд. Что бы подключив на все страницы скрипт — решить проблему. Еще пишут за возможные проблемы с обработкой в Safari, только, к сожалению, пока нет возможности это протестить.
kafeman
03.05.2016 18:06-95. Не использовать target="_blank". Очень раздаражают сайты, которые считают, что они умнее меня. Я сам в состоянии решить, в какой вкладке мне нужно открыть ссылку.
aliencash
03.05.2016 18:39+42Ну заведете свой сайт, будете делать как хотите. Только думаю очень быстро поймете, особенно если сайт будет коммерческий, что вам не выгодно, чтобы пользователь открывал внешнюю ссылку с вашего сайта в той же вкладке, т.к. это означает, что он закрыл ваш сайт, а как вернуться скорее всего не знает. Даже боюсь представить как вы тогда будете раздражены.
profesor08
03.05.2016 19:27-6Если мне надо перейти по ссылке, я жму на ссылку левым кликом. Если мне надо открыть ссылку в новой вкладке, я открываю ее в новой вкладке. Все просто, все логично, все удобно.
zharikovpro
03.05.2016 19:33+26> Все просто, все логично, все удобно.
Для пользователей, которые умеют так делать. Их меньшинство. Для остальных даже просто вернуться на предыдущую страницу с использованием кнопки back может быть нерешаемой задачей.Mingun
03.05.2016 20:07-26Что в таком случае эти пользователи делают на вашем сайте? Найти и нажать на кнопку Оплатить для них точно также будет нерешаемой задачей. Не говоря уже о том, что платежные реквизиты как-то нужно вводить, а это точно будет происходить не на вашем сайте.
zharikovpro
03.05.2016 20:52+21> Что в таком случае эти пользователи делают на вашем сайте?
Пользуются им без кнопки back, упорно идут только вперед к заветной цели, не делая ни шагу назад! :)
kafeman
03.05.2016 21:30-2Я вас разочарую. Пользователи, не знающие о кнопке Back, не смогут закрыть/перейти на другую вкладку. Этот вывод я сделал на основе длительных наблюдений за неопытными пользователями.
zharikovpro
03.05.2016 21:42+11Лично я не наблюдал за многими неопытными пользователями. Но точно знаю, что закрывать вкладки моя мама умеет, а пользоваться кнопкой back — нет. Весьма платежеспособный клиент, активно пользующийся интернет-магазинами и сайтами типа booking.com
zharikovpro
03.05.2016 21:50+2C target="_blank" ей удобно если что просто закрыть вкладку с проблемным платежом через внешний биллинг например и сделать новую попытку оплаты товара, нажав кнопку Оплатить на сайте магазина. С кнопкой back это практически невозможно, т.к. процесс оплаты часто многостраничный и можно быстро уйти далеко от исходной страницы. А открывать такие ссылки принудительно в новой вкладке рефлекса нет.
Agel_Nash
04.05.2016 01:32+1рефлекса нет
Все люди разные. Я, например, практически все ссылки открываю через ctrl
EvilFox
03.05.2016 22:06EvilFox
03.05.2016 22:12+1Вот что раздражает когда хабр этот _blank пихает зачем-то для внутренних ссылок.
Helldar
04.05.2016 03:48Предполагаю, фишка в том, что линк может вести на другую страницу. Вот, например, я читаю твой коммент и жму линк — он открывается во второй вкладке. Смотрю, что там за инфа, закрываю вкладку и легким кликом мыши возвращаюсь к сему комменту с линком, под которым пишу ответ.
Стоит ли говорить, что если б линк открывался в этой же вкладке, мне б пришлось как минимум воспользоваться кнопкой «бэк» и еще пролистать страницу, чтобы найти нужный коммент?Alexeyslav
04.05.2016 08:26+3Кроме того, ещё и сбросятся все «непрочитанные» комментарии.
EvilFox
04.05.2016 15:18+4В случае если ссылка ведёт на эту же страницу комментарии не потеряются.
А вообще сброс непрочитанных комментариев при обновлении страницы плохая идея.
EvilFox
04.05.2016 15:16+1Это не сложно определить ведёт он на другую или на эту страницу. Я говорю о ссылках на комментарий на текущую страницу.
Тут же якори. Нажал просто переместило на позицию комментария, без обновления страницы. Нажал назад опять же переместило обратно без обновления. Пролистывать не нужно.
funnybanana
03.05.2016 19:34+5ммм… а попробуйте нажимать колесиком ;-)
но вы говорите от лица неопытного пользователя, и я как скромный сайтостроитель категорически с вами не согласен, вы бы это тоже поняли если бы понаблюдали за реальным поведением разных пользователей на сайте. ну через вебвизор к примеру.profesor08
03.05.2016 20:16+2ммм… способы открытия ссылок в новой вкладке не ограничиваются средним колесиком мыши. Я обозначил задачу, а решает ее каждый сам, так как ему удобно. Хоть через контекстное меню, хоть контрол зажимает и тд.
И говорю от лица опытного пользователя. Которорый перекращает пользоваться сайтами, которые ведут себя непредсказуемо.khim
03.05.2016 20:33+2Контрольный вопрос: чем вы пользуетесь вместо Гугла и Яндекса? Они ведь тоже ведут себя «непредсказуемо».
Культурные особенности, кстати: в US, к примеру, Гугл так себя не ведёт по умолчанию, а в России… пришлось, да.profesor08
03.05.2016 20:38У нас похоже разные понятия о предсказуемости. Раз столько негатива вызывает просто уточнение в ответ на непонимает, то нестоит что-то обсуждать.
kafeman
03.05.2016 21:37Контрольный вопрос: чем вы пользуетесь вместо Гугла и Яндекса?
DuckDuckGo. Технически, возмозможно, это результататы Google или Яндекс, но с точки зрения конечной веб-страницы, очень адекватный сайт.
foxmuldercp
03.05.2016 23:27+4Особенно «колёсико» актуально на смартфоне и планшете.
Извините, наболело как со стороны пользователя, так и боль со стороны разработчика.
EvilFox
03.05.2016 22:05Ага… особенно хорошо когда после перехода по такой ссылке убивается история переходов и назад уже не вернуться (уже не мало раз натыкался на такие сайты). Уж лучше в этом плане предсказуемый target="_blank" для внешних сайтов.
EvilFox
03.05.2016 22:19+1Но в идеале если ваш сайт что-то вроде форума где есть настройки можно дать пользователю самому выбрать желаемое поведение.
Гугл в этом плане раздражает что навязывает открытие новой вкладки.profesor08
03.05.2016 23:34Ну как сказать. В адресной строке есть такой параметр — newwindow=1. Вот он и отвечает за то, чтоб ссылки открывались в текущем окне или в новом. А раз он там есть, то должна быть и настройка, чтоб его менять.
Miraage
03.05.2016 22:25-11Очень стыдно за человечество, которое не знает про Ctrl+Click, Alt+Click.
foxmuldercp
03.05.2016 23:28+9Сделаете такое для планшетов и смартфонов — подозреваю, что прогремите на весь ИТ мир.
fzzr
04.05.2016 10:23+6Прошу простить, если я что-то не понимаю, но есть же вполне полноценные long-press (iOS, Andr.) и всякие новые 3D-Touch (iOS only). Все знакомые мне матери, включая мою, с этим справляются.
trevoga_su
04.05.2016 15:38-3лол )))
только айтишники считают, что мир ограничен рамками их индустрии и все должны поголовно, как в КНДР, знать ПК как биографию Ким ир сена
dom1n1k
03.05.2016 21:14+2Есть много ситуаций, когда использование target=_blank объективно полезно и даже необходимо.
kafeman
03.05.2016 21:28-6Было бы интересно взгялнуть на пример.
Я вот считаю, что никакой автоматический алгоритм эту задачу решить не может (если бы мог, я бы уже давно написал расширение для своего браузера). На примере того же Facebook: иногда я нахожу сам пост бесполезным, и все, что мне нужно — поскорее перейти на сайт. А иногда я хочу присоединиться к дисскусии в комментариях, и после просмотра сайта я хочу вернуться в то же место, с которого начал. Итого, мое решение об открытии ссылки в той же вкладке, или в новой, принимается мной на основе анализа содержимого исходной страницы. И простыми регулярками тут уже не обойдешься.dom1n1k
03.05.2016 21:33+3Самое банальное — форумы/комментарии и ссылки в них на внешние сайты.
Во-первых, я ещё не дочитал обсуждение и почти наверняка захочу к нему вернуться.
Во-вторых, я мог начать набирать ответ и его нельзя потерять.kafeman
03.05.2016 21:43-4Во-первых, я ещё не дочитал обсуждение и почти наверняка захочу к нему вернуться.
Зависит от того, как я попал на этот сайт. Если я искал решение проблемы через Google, то этот форум — только дополнительный посредник. В большинстве случаев я понимаю сразу, что именно по этой ссылке находится решение. И форум этот я хочу скорей закрыть.
Во-вторых, я мог начать набирать ответ и его нельзя потерять.
Тот редкий случай, когда бы я простил сайту confirm на unload.
eoffsock
03.05.2016 21:57+1Для случаев, когда пользователь начал набирать текст и случайно закрыл страницу, нужно реализовывать сохранение данных, введенных в форму. Это немного сложнее confirm на unload или там target blank, но более адекватно.
dom1n1k
03.05.2016 22:01+1Сохранять данные в форме полезно, но это должно быть дополнительным эшелоном защиты, а не единственным.
Лучше избежать проблемы вообще, чем подпирать её костылями.eoffsock
03.05.2016 22:09Ну, confirm без js не реализовать, насколько я понимаю.
А раз так, то лучше уж сделать изящное решение: настройки сохранять автоматически, какие-нибудь контентные данные, чаты, статьи — сохранять данные в форме и восстанавливать при релоаде.
Пароли не сохранять, понятно. Сверху к этому прикрутить сохранение данных при потере сети в local storage или вроде того.
В идеальном случае пользователь просто не заметит этого всего. А вот если что-то пойдет не так — будет приятно удивлен.
Полностью проблемы не избежать, в конце концов. Более того, меня бы раздражало сообщение при закрытии страницы, если я вдруг передумал отправлять форму.
mityukov
04.05.2016 15:18Есть задумка автора сайта/[UX-]дизайнера/… и есть ваши личные хотелки. Я считаю что у _обоих_ должен быть инструмент влияния на то, что происходит при щелчке на ссылку. Мне как пользователю бывает досадно, например, когда забыл «принудить» новую вкладку, а сайт со своей стороны тоже не позаботился. Представляешь, если «нагоняешь» непрочитанные сообщения в какой-нить «infinite-scroll» ленте, позицию в которой не восстановишь кнопкой ;-)
P.S.: возможно, в браузеры не помешало бы добавить функцию «открыть принудительно в текущей вкладке» (по аналогии с контрол-кликом), но это не отменяет полезности тэга «target».CaptainFlint
04.05.2016 19:40+1В Опере 12 есть принудительное открытие в текущей вкладке (правый клик — Открыть).
Vit1
04.05.2016 13:45-1Не знаю за что Вас так заминусовали, но я согласен с вами (Жаль, что нет кармы апнуть коммент). target="_blank" — это одна из причин, почему я не могу пользоваться яндекс поиском, ужасно раздражает!
kafeman
04.05.2016 14:57-1Я тем более не понимаю, почему люди, кричащие о недопустимости контроля Интернета со стороны государства, принуждают меня открывать ссылки в новых вкладках, потому что НАМ ТАК ВЫГОДНО!!!11.
Напомнилоaureliano_b
12.05.2016 17:16+2не то слово.
«Не умножай сущности без необходимости», говорят тебе мудрые олдскульные разработчики, %юзернейм%
aureliano_b
12.05.2016 17:15+3жму руку!
(как же раздражает невозможность плюсануть комментарий старее пары дней.
Если ты в основном занят и читаешь сайт эпизодически или случайно обнаружил интересный топик в еженежельном дайджесте, то, увы… упс. Ты превращаешься в пассивного наблюдателя. В результате чего возможность поставить оценку остается только у специального контингента юных бездельников (не в обиду юным бездельникам будет сказано), у которых, должно быть масса времени на ежедневное чтение всякой «цифровой макулатуры», что безусловно сказывается на качестве материалов и в перспективе приведет Хабру к полному унынию. К бабке, что называется, не ходи).
Alex_ME
03.05.2016 18:06+1Или открывать ссылки в той же самой вкладке, без любых извращений. Если пользователю надо — он сам откроет в новой вкладке. Сайты стали слишком много решать за нас, мне кажется.
ganjar
03.05.2016 18:22+10На хабре: тыц тыц
Kendrick
03.05.2016 19:04+12У меня такая привычка: если хочу открыть ссылку в новой вкладке, то жму на колесо мыши(браузер Chromium). При таком раскладе подмены страницы не происходит, а если просто кликнуть левой кнопкой то подмена работает.
Какая полезная привычка :)ComradeAndrew
03.05.2016 19:06+4У меня такая же привычка. Ещё со времен, когда нужно было некоторое время ждать загрузки страницы. Открываешь новую страницу через колесо мыши и пока она грузится ты дочитываешь прошлую страницу. С таким раскладом и правда не работает данная уязвимость, подтверждаю :)
ganjar
03.05.2016 19:09Сработает так же при ctr + click, только пример на это не рассчитан так как пользователь сразу заметит срабатывание редиректа на странице, на которой нажал на ссылку. По идее решается переносом кода в window.onfocus
faiwer
03.05.2016 21:24+1При таком раскладе подмены страницы не происходит
Что кстати говоря ещё больше удивляет — а зачем они сделали именно такое поведение для
target=_blank
? По логике вещей открытие колесом или иным способом в новой вкладке вручную, не должно принципиально отличаться отtarget=_blank
. Т.е. или этого несчастногоopener
-а не должно быть вовсе, либо он должен быть и при middle-клик-открытии.Kendrick
03.05.2016 21:34Я так понимаю поведение при клике левой кнопкой по ссылке с «target=_blank» каким-то образом стандартизировано, а вот клик колесом это уже функционал конкретного браузера и они сделали как им хотелось(без opener'а).
invented
03.05.2016 18:27+8Фейсбук быстро среагировал )
При просмотре вашего поста и переходе по ссылке(фишинг, все дела), меня разлогинивает в оригинальном ФБ, и после логина вижу:
«Ваш аккаунт временно заблокирован»....«Скорее всего, ваш аккаунт был взломан в результате ввода вашего пароля на похожем на Facebook веб-сайте. Такой тип атаки называется фишингом. Подробнее в Справочном центре.»
Похоже они как-то автоматически палят потенциальный фишинг, включая window.opener и помечают аккаунты как suspiciousSabin
03.05.2016 18:49+2Продолжу: если вы не уверены, что сможете сразу ввести код проверки из смс или ответ на контрольный вопрос для разблокировки аккаунта — не ходите по ссылке на пост FB из примера.
JekaRu
03.05.2016 19:43Это хорошо! Пойду добавлю к ссылкам
rel="noopener noreferrer"
cybernomix
04.05.2016 12:44+1Одновременно поломав передачу HTTP_REFERER по вашим ссылкам. В лучшем случае принимающая сторона не посчитает вас, как источник трафика, в худшем могут не засчитать какие-то рекламные переходы… не очень хороший костыль
Zenitchik
04.05.2016 15:22Это имеет смысл в поисковиках. Я натыкался на сайты, которые вызывали условный редирект, для некоторых рефереров (поисковиков). Пока я не врубился, что происходит (пришлось подебажить сайт, хорошо быть клиентским разработчиком), не смог прочитать нужную мне информацию. Естественно, гневный отзыв владельцу сайта был написан, но я не проверял, услышан ли он был.
cybernomix
04.05.2016 17:02Только что протестил, всё еще хуже, в том числе в обозримом будущем…
rel=«noopener» — так же лишает HTTP_REFERER (Chrome 49.x), т.е. очень похоже что это «костыль» или alias на всё тот же nofollow… всё плохо в индустрии… :(
conformist
03.05.2016 19:58А я как-то пытался вообще бороться с этим target=_blank и в общем не нашёл нормального метода без использования Firefox addons. Есть, например, такой способ:
about:config:
set browser.link.open_newwindow 1
Отлично работает, но если кликать где-то вне браузера, то активная ссылка в браузере заменится той, на которую кликнули, вместо открытия новой вкладки. Так что решение не подходит.
А нужно было это затем, что:
1) да, я опытный пользователь и знаю как и где мне открыть новую вкладку, если это нужно;
2) напрягают сайты, которые в своей же строке поиска уводят меня на другую вкладку, хотя я перемещаюсь в пределах одного и того же сайта. (например поиск azlyrics.com).
front_end
03.05.2016 20:48+1Дыра в CSP. Поправят в 3 версии, собсна как и проблеу с
<a href=blob://></a>
MaGIc2laNTern
03.05.2016 23:40+9BeLove
04.05.2016 01:00+10На хабре много подобных стабильно «повторяемых» тем. Чего стоят регулярки и валидация email :)
MNB
04.05.2016 00:22+4Уже давно эксплуатируется недобросовестными рекламщиками: клик по банеру открывает новую вкладку, в которой открывается страница, с которой перешли, а в предыдущей вкладке открывается рекламируемый сайт.
В чем преимущество такого поведения не понятно, но напрягает. Интуитивно закрываешь рекламную страницу, теряешь историю, введенную информацию и тд.Alexsmt
04.05.2016 01:08+2Именно в этом и заключается их цель — отучить пользователя на автомате за пол секунды закрывать еще не прогрузившуюся рекламную страницу.
Sergey6661313
08.05.2016 19:41а как это лечить?
REZ1DENT3
10.05.2016 10:07Написать расширение к браузеру. И на каждую страницу добавлять это:
window.opener = null;
alexpogodin
04.05.2016 02:29-5Давным-давно уже разобрали эту тему юзабилити эксперты (например, Якоб Нильсен еще в 1999 году). К сожалению, не смог найти более развернутый пост на эту тему, но полностью согласен: существует несколько способов отрыть ссылку в новом окне, но не существует ни одного способа открыть ее в это же окне, если вы прописали там target.
После этого аттрибут target был удален из Strict спецификаций (HTML4 & XHTML), ну да кто об этом знает? Все просто писали себе doctype-ы.
А вранье про заботу о мобильных клиентах, которые хотят открыть ссылку в новой вкладочке. Я уж не говорю, что загруженные страницы нынче могут сжирать неприлично памяти, но есть еще и ограничение на количество открытых окон браузера. Или вы сейчас скажете, что никогда не встречали уведомления, что «Достигнут максимум открытых окон, ссылка открыта не будет».
Перестаньте использовать эту мерзость. Займитесь лучше повышением культуры пользования браузером у ваших мам. Кстати да, моя мама не понимает что такое новая вкладка, или, например, другой документ в MDI-интерфейсе (Word & Excel, например, хотя эти нынче используют нестандартную реализацию с выносом кнопки в панель задач). А кнопки Вперед-Назад у нее всегда на виду и предельно понятны. И кстати, на телефоне кнопка Назад аж хардварная.
Ну и коротенько о «оставить ценного пользователя на своем сайте». Когда пользователь начинает подчищать вкладки, уверен на 70%, что он закроет и Ваш сайт, не льстите себе. А иногда и случайно ткнув крестик.
Так что перестаньте нести ерунду! Оставьте за пользователем право открыть ссылку, как ему нравится.Dolios
04.05.2016 14:55-1>А вранье про заботу о мобильных клиентах, которые хотят открыть ссылку в новой вкладочке.
Я хочу, чтобы ссылки открывались в новой вкладке по дефолту, когда я с планшета. Да и не только когда я с планшета, а, пожалуй, всегда. А если я захочу открыть ссылку в той же вкладке я согласен сделать контрол-клик.
>Я уж не говорю, что загруженные страницы нынче могут сжирать неприлично памяти
Плевать, у меня в планшете 4ГБ оперативы.
>Или вы сейчас скажете, что никогда не встречали уведомления, что «Достигнут максимум открытых окон, ссылка открыта не будет».
Никогда не встречал.
>А кнопки Вперед-Назад у нее всегда на виду и предельно понятны
Нажимая кнопку «назад» на Хабре с сношу себе всю статистику по непрочитанным комментам. Восстановить эту информацию невозможно, насколько я понимаю.
Я открываю страницу в той же вкладке в 2 случаях, когда я целенаправленно хочу уйти с сайта и когда я перехожу на новую страницу форума/ленты хабра/etc. В остальных 98% случаев я всегда открываю ссылку в новой вкладке. Так что, юзкейсы у всех разные, не нужно думать, что ваш единственно верный.alexpogodin
04.05.2016 19:11-1Вы кагбэ и не противоречили мне. Ну почти. По-крайней мере в той части, где вы целенаправленно хотите уйти с сайта. Так вот, если владелец непонравившегося вам сайта решил, что вам нужно открыть новую вкладку, у вас не останется выбора. Речь в моем посте, и исследованиях британских ученых, если хотите, именно об этом.
Еще раз. Вам никто не запрещает открыть ссылку в новом окне. Но расскажите мне, где вы видели пункт меню в браузере «Открыть в этой же вкладке»Dolios
04.05.2016 22:24Ну как же не противоречит, когда я на все ваши аргументы привел контраргументы?
Еще раз. Вам никто не запрещает открыть ссылку в новом окне. Но расскажите мне, где вы видели пункт меню в браузере «Открыть в этой же вкладке»
Еще раз, я хочу, чтобы можно было все ссылки всегда открывать вмновом окне и только по специальному действию типа контрол-клик открывать их в том же. Сейчас браузеры не имеют подобной настройки, открывать ссылки в новом окне на планшете неудобно. Поэтому я рад, что разработчики некоторых сайтов идут навстречу пользователям. Конечно, было бы лучше, чтобы подобное поведение настраивалось, но пока имеем, что имеем.
В конце концов вам никто не мешает скопировать адрес ссылки и вставить ее в адресную строку того же окна. Или кликнуть на ссылку и нажать на крестик.
Helldar
04.05.2016 03:45У меня Google Chrome 50 последней версии — линки в статье не срабатывают.
Хотя апдейтов браузера не было крайние 2 дня.Kesantielu
04.05.2016 12:51Chrome 52 — работает.
Helldar
04.05.2016 13:28+152? Тестовая, что ли?
Версия 50.0.2661.94 m
Вы используете самую новую версию Chrome.Helldar
05.05.2016 02:53Зачем минусовать-то?
У меня и сейчас показывает свежую стабильную версию как 50.0.2661.94 m
Вот пруфkhim
05.05.2016 09:38-4Не «зачем», а «почему». Потому что тут не «кружок кройки и шитья», а Хабр. Место, где людей, не знающих о том, как разрабатываются и выпускаются браузеры, в общем-то, быть не должно.
Одно дело — увидеть подобные «перлы» от бухгалтера, другое — от web-разработчика.Helldar
05.05.2016 09:43В курсе как они разрабатываются и выпускаются. Так как крайний стабильный релиз именно 50 версии, вот и уточнил не пользуется ли сей камрад «ночной» сборкой aka тестовой. Всего лишь.
mamontovdmitriy
04.05.2016 10:23Только что обновил оперу, все еще работает(
cybernomix
04.05.2016 14:18+1Я думаю это поведение останется таким и в будущем, ради обратной совместимости, т.к. _blank, является дочерним фреймом (если формально).
А вот rel=«noopener» должен выключать такое поведение. Т.е. у разработчика есть выбор какое поведение ему нужно.
Де факто, же это «гадость полнейшая», когда речь о cross-domain scope.
P.S.: Может можно на серверной стороне поотключать средствами заголовков, типа Server-Side Access Control через HTTP_ORIGIN?cybernomix
04.05.2016 18:44+1P.P.S: Увы, вынужден растоптать надежды, HTTP-заголовком Access-Control-Allow-Origin: selfdomain это не решается, как с гуся вода, это только для XMLHttpRequest канает и то с целью наоборот.
Вижу только один путь: раз это «баг» идёт от JS, то JS-ом он и должен решаться, у кого js не работает, у того и «баг» не работает — всё просто.
А js-ом это как раз полечить можно вдоль и поперёк.Zenitchik
04.05.2016 19:20А js-ом это как раз полечить можно вдоль и поперёк.
Какое конкретно решение Вы предлагаете?mwizard
04.05.2016 19:271. пройтись по всем
<a>
и добавить имnoopener
вref
.
2. переопределитьwindow.open
и стиратьwindow.opener
у всех новооткрываемых окон.Zenitchik
04.05.2016 20:36Логично. Про перекрытие мне в голову не пришло.
cybernomix
04.05.2016 21:38Да, только в обоих случаях выше HTTP_REFERER — тоже потеряется, увы (сам удивляюсь зачем это в жесткой связке стоит)
iit
04.05.2016 14:10На сайте компании где работаю от target="_blank" мы отказались вообще, у нас есть url через который происходят редиректы на все сторонние ресурсы.
cybernomix
04.05.2016 21:42но на этот-то то урл вы с target="_blank" конечно ходите, а поделитесь как делаете редирект чтобы максимально гарантировано сохранить рефера
iit
06.05.2016 07:261) На свой урл да
2) Все ссылки имеют свой хэш и по этому хэшу происходит редирект, ссылками управляют контентщики они головой отвечают что все ссылки валидны. У нас агрегатор, то каждая ссылка очень жирно проплачена и договор не нее есть, так что на этом не заворачиваемся.
tendium
04.05.2016 14:45+1Я это репортил в FB года два назад. Они мне сказали, что это known issue, но по тону было похоже на «нам пофиг».
cyberpunkyc
04.05.2016 15:24Пару лет назад, в январе, был уже подобный пост. Не могу найти оригинал, автор выпилился с хабра, но тема в принципе совсем не нова.
cybernomix
04.05.2016 17:09+1Таким грешат многие сайты, а некоторые, даже не считают это за проблему «на своей стороне»
Воу воу воу, то что там «с формой бобра» по ссылке — это совсем из другой оперы, да и повеселее будет — это подмена url'a в адресной строке на «чтохочу.com» и она работает в Chrome.
Вот это день «интересных историй»… я думал такие забавы остались где-то в середине 00-ых… печаль.EviGL
04.05.2016 22:09+1Если почитать, это не подмена урла, это комбинация работы с опенером (таба открытая с недоверенного ресурса всё ещё контролируется этим ресурсом) и хитрости с подменой легитимной страницы на очень быстро грузящуюся data:html страницу (так, чтобы перезагрузка была не видна пользователю).
eshimischi
05.05.2016 11:36Господа, все таки предлагаю сделать вывод под всем выше сказанным и статьей и провести черту. Каким образом поступить с target="_blank"? При условии, что это работает там, это не работает там, костыль из javascript. Спасибо.
front_end
06.05.2016 00:39+1Еще туда же, к примерам, проблема общая:
<a href="//evil.com" target="_blank" rel="noreferrer">CLICK</a> <!-- window.opener нет --> <map><area href="//evil.com" target="_blank" rel="noreferrer">CLICK</area></map> <!-- window.opener нет --> <svg><a xlink:href="//evil.com" rel="noreferrer">CLICK</a></svg> <!-- window.opener есть --> <form action="//evil.com" target="_blank" rel="noreferrer"><input type="submit"></form> <!-- window.opener есть --> <form id="test" rel="noreferrer"></form><button form="test" formtarget="_blank" formaction="//evil.com">CLICKME</button> <!-- window.opener есть --> <math href="//evil.com" xlink:show="new" rel="noreferrer">CLICKME</math> <!-- window.opener есть -->
nickolaym
07.05.2016 23:29Яндекс-браузер 16.3 на базе Хромиума 47.0.2526 — попытка доступа к свойству window.opener вызывает неперехватываемое исключение
Uncaught SecurityError: Blocked a frame with origin «null» from accessing a frame with origin «null». Protocols, domains, and ports must match.
На более свежих версиях ещё не проверял, — может быть, эту защиту сломали.khim
08.05.2016 13:13Похоже не на защиту, а на какую-то ошибку. Вы точно это не пытались проверять на файлах на диске (где это, понятно, и не могло работать) или как-нибудь ещё «странно» сконфигурировать свою тест-систему?
nickolaym
08.05.2016 15:55А и впрямь! Конечно, я попытался проверить в песочнице.
Окей, поставлю коллег в известность, что существует не только дырка в безопасности, но ещё и баг. Может, доберутся и пофиксят.
iNickname
13.05.2016 18:23-1Вот это ЛОЛ! А хотите прикол? В Китае ВСЕ сайты открывают ВСЕ линки в новой вкладке. Учитывая поголовную компьютерную неграмотность пользователя, подозреваю что можно кучу всего наловить у них!
М, да-а-а, *facepalm*.
faiwer
Ого. Не знал. Неожиданное поведение. Наверное, хотели сделать как лучше…