Опасный target="_blank"

    Большинство создают внешние ссылки через target="_blank" и не знают одного интересного нюанса — страница, на которую мы попадем таким образом, получит частичный контроль над ссылающейся на нее страницей через js свойство window.opener.

    Через window.opener.location мы сможем сделать редирект на, к примеру, фишинговую страницу. Это своего рода tabnabbing, только более продвинутый. Так как жертва меньше всего ожидает подмены страницы, в открытой ранее, доверенной вкладке браузера.

    Проблема далеко не новая, но до сих пор актуальная, и как вижу, не многие о ней знают.

    Проблема так же существует в facebook.

    Для примера — открываем пост, кликаем по 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.

    P.P.S: Для всех, кто считает оригиналом статью https://medium.com/@jitbit/target-blank-the-most-under... — сравните дату публикации. Моя статья вышла 3го мая. Англоязычная — 4го.
    Поделиться публикацией

    Похожие публикации

    Комментарии 136
      +28

      Ого. Не знал. Неожиданное поведение. Наверное, хотели сделать как лучше…

        +9
        Вот это да! Это же сколько всяких пакостей можно наделать то…
          +15
          Хорошо бы писать источник, откуда берете информацию.
          mathiasbynens.github.io/rel-noopener
            +2
            Ваша ссылка мне на глаза попалась один раз во время поиска различных вариантов решения проблемы и не является источником для данной статьи.
            Для всех остальных, кто считает что оригинал статьи https://medium.com/@jitbit/target-blank-the-most-under... — сравните для начала дату публикации. Моя статья вышла 3го мая. Англоязычная — 4го.
              –4
              Я не выкатил ссылку, как источник (может быть и статья по ссылке не первоначальная). Всего лишь пример того, откуда вы могли взять информацию (извиняюсь пред хабравчанами, что этого не написал), который я видел НАМНОГО раньше вашей статьи.
              Но указывать источник было бы неплохо. Особенно, если вы привнесли какую-то лепту и дописали пару слов от себя. Чего стесняться?
                +2
                Что нужно считать источником? источник вдохновения для написания статьи был закрытый репорт в FB со словами «спасибо, мы уже знаем о проблеме» (собственно как и в комментарии ниже) и официальная позиция Google на этот счет. А о проблеме, мне лично, стало известно, с паблик репортов на hackerone.
            +1
            Есть у одних решений какие-то преимуществ/недостатки перед другими? Вот мне больше нравится первое за простоту. Зачем мне может понадобиться использовать какое-то другое решение?
              +1
              Другие варианты больше подходят тем, у кого, к примеру, много ссылок, ссылки в контенте и тд. Что бы подключив на все страницы скрипт — решить проблему. Еще пишут за возможные проблемы с обработкой в Safari, только, к сожалению, пока нет возможности это протестить.
              –9
              5. Не использовать target="_blank". Очень раздаражают сайты, которые считают, что они умнее меня. Я сам в состоянии решить, в какой вкладке мне нужно открыть ссылку.
                +42
                Ну заведете свой сайт, будете делать как хотите. Только думаю очень быстро поймете, особенно если сайт будет коммерческий, что вам не выгодно, чтобы пользователь открывал внешнюю ссылку с вашего сайта в той же вкладке, т.к. это означает, что он закрыл ваш сайт, а как вернуться скорее всего не знает. Даже боюсь представить как вы тогда будете раздражены.
                  –6
                  Если мне надо перейти по ссылке, я жму на ссылку левым кликом. Если мне надо открыть ссылку в новой вкладке, я открываю ее в новой вкладке. Все просто, все логично, все удобно.
                    +26
                    > Все просто, все логично, все удобно.

                    Для пользователей, которые умеют так делать. Их меньшинство. Для остальных даже просто вернуться на предыдущую страницу с использованием кнопки back может быть нерешаемой задачей.
                      –26

                      Что в таком случае эти пользователи делают на вашем сайте? Найти и нажать на кнопку Оплатить для них точно также будет нерешаемой задачей. Не говоря уже о том, что платежные реквизиты как-то нужно вводить, а это точно будет происходить не на вашем сайте.

                        +21
                        > Что в таком случае эти пользователи делают на вашем сайте?

                        Пользуются им без кнопки back, упорно идут только вперед к заветной цели, не делая ни шагу назад! :)
                        –2
                        Я вас разочарую. Пользователи, не знающие о кнопке Back, не смогут закрыть/перейти на другую вкладку. Этот вывод я сделал на основе длительных наблюдений за неопытными пользователями.
                          +11
                          Лично я не наблюдал за многими неопытными пользователями. Но точно знаю, что закрывать вкладки моя мама умеет, а пользоваться кнопкой back — нет. Весьма платежеспособный клиент, активно пользующийся интернет-магазинами и сайтами типа booking.com
                            +2
                            C target="_blank" ей удобно если что просто закрыть вкладку с проблемным платежом через внешний биллинг например и сделать новую попытку оплаты товара, нажав кнопку Оплатить на сайте магазина. С кнопкой back это практически невозможно, т.к. процесс оплаты часто многостраничный и можно быстро уйти далеко от исходной страницы. А открывать такие ссылки принудительно в новой вкладке рефлекса нет.
                              +1
                              рефлекса нет

                              Все люди разные. Я, например, практически все ссылки открываю через ctrl
                                +5
                                У меня на это дело выделена целая кнопка-колесо мыша)
                                  0
                                  В Firefox с помощью плагинов (например Tab Mix Plus) открытие в новой вкладке делается стандартным поведением.
                              +1
                              Вот что раздражает когда хабр этот _blank пихает зачем-то для внутренних ссылок.
                                0
                                Предполагаю, фишка в том, что линк может вести на другую страницу. Вот, например, я читаю твой коммент и жму линк — он открывается во второй вкладке. Смотрю, что там за инфа, закрываю вкладку и легким кликом мыши возвращаюсь к сему комменту с линком, под которым пишу ответ.
                                Стоит ли говорить, что если б линк открывался в этой же вкладке, мне б пришлось как минимум воспользоваться кнопкой «бэк» и еще пролистать страницу, чтобы найти нужный коммент?
                                  +3
                                  Кроме того, ещё и сбросятся все «непрочитанные» комментарии.
                                    +4
                                    В случае если ссылка ведёт на эту же страницу комментарии не потеряются.
                                    А вообще сброс непрочитанных комментариев при обновлении страницы плохая идея.
                                    +1
                                    Это не сложно определить ведёт он на другую или на эту страницу. Я говорю о ссылках на комментарий на текущую страницу.
                                    Тут же якори. Нажал просто переместило на позицию комментария, без обновления страницы. Нажал назад опять же переместило обратно без обновления. Пролистывать не нужно.
                            +5
                            ммм… а попробуйте нажимать колесиком ;-)

                            но вы говорите от лица неопытного пользователя, и я как скромный сайтостроитель категорически с вами не согласен, вы бы это тоже поняли если бы понаблюдали за реальным поведением разных пользователей на сайте. ну через вебвизор к примеру.
                              +2
                              ммм… способы открытия ссылок в новой вкладке не ограничиваются средним колесиком мыши. Я обозначил задачу, а решает ее каждый сам, так как ему удобно. Хоть через контекстное меню, хоть контрол зажимает и тд.

                              И говорю от лица опытного пользователя. Которорый перекращает пользоваться сайтами, которые ведут себя непредсказуемо.
                                +2
                                Контрольный вопрос: чем вы пользуетесь вместо Гугла и Яндекса? Они ведь тоже ведут себя «непредсказуемо».

                                Культурные особенности, кстати: в US, к примеру, Гугл так себя не ведёт по умолчанию, а в России… пришлось, да.
                                  0
                                  У нас похоже разные понятия о предсказуемости. Раз столько негатива вызывает просто уточнение в ответ на непонимает, то нестоит что-то обсуждать.
                                    0
                                    Контрольный вопрос: чем вы пользуетесь вместо Гугла и Яндекса?
                                    DuckDuckGo. Технически, возмозможно, это результататы Google или Яндекс, но с точки зрения конечной веб-страницы, очень адекватный сайт.
                                    +1
                                    средним колесиком мыши
                                    А есть другие?!
                                      +2
                                      Ага. Например у Logitech MX Master
                                        +1
                                        Ctrl + Mouse Left Button
                                      +4
                                      Особенно «колёсико» актуально на смартфоне и планшете.
                                      Извините, наболело как со стороны пользователя, так и боль со стороны разработчика.
                                      0
                                      Ага… особенно хорошо когда после перехода по такой ссылке убивается история переходов и назад уже не вернуться (уже не мало раз натыкался на такие сайты). Уж лучше в этом плане предсказуемый target="_blank" для внешних сайтов.
                                        +1
                                        Но в идеале если ваш сайт что-то вроде форума где есть настройки можно дать пользователю самому выбрать желаемое поведение.
                                        Гугл в этом плане раздражает что навязывает открытие новой вкладки.
                                          0
                                          Ну как сказать. В адресной строке есть такой параметр — newwindow=1. Вот он и отвечает за то, чтоб ссылки открывались в текущем окне или в новом. А раз он там есть, то должна быть и настройка, чтоб его менять.
                                            0
                                            Да, сейчас вижу есть настройка. Спасибо.
                                      –11
                                      Очень стыдно за человечество, которое не знает про Ctrl+Click, Alt+Click.
                                        +9
                                        Сделаете такое для планшетов и смартфонов — подозреваю, что прогремите на весь ИТ мир.
                                          +6
                                          Прошу простить, если я что-то не понимаю, но есть же вполне полноценные long-press (iOS, Andr.) и всякие новые 3D-Touch (iOS only). Все знакомые мне матери, включая мою, с этим справляются.
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                            +1
                                            Вторая рука занята, друг, рука занята!
                                              +1
                                              Есть мышки с модификаторами. И тачпады/трекпоинты неподалёку от Ctrl. И вообще, можно навигироваться с клавиатуры, причём не обязательно бегая стрелочками по всем элементам.
                                          0
                                          del
                                            +2
                                            Есть много ситуаций, когда использование target=_blank объективно полезно и даже необходимо.
                                              –6
                                              Было бы интересно взгялнуть на пример.

                                              Я вот считаю, что никакой автоматический алгоритм эту задачу решить не может (если бы мог, я бы уже давно написал расширение для своего браузера). На примере того же Facebook: иногда я нахожу сам пост бесполезным, и все, что мне нужно — поскорее перейти на сайт. А иногда я хочу присоединиться к дисскусии в комментариях, и после просмотра сайта я хочу вернуться в то же место, с которого начал. Итого, мое решение об открытии ссылки в той же вкладке, или в новой, принимается мной на основе анализа содержимого исходной страницы. И простыми регулярками тут уже не обойдешься.
                                                +3
                                                Самое банальное — форумы/комментарии и ссылки в них на внешние сайты.
                                                Во-первых, я ещё не дочитал обсуждение и почти наверняка захочу к нему вернуться.
                                                Во-вторых, я мог начать набирать ответ и его нельзя потерять.
                                                  –4
                                                  Во-первых, я ещё не дочитал обсуждение и почти наверняка захочу к нему вернуться.
                                                  Зависит от того, как я попал на этот сайт. Если я искал решение проблемы через Google, то этот форум — только дополнительный посредник. В большинстве случаев я понимаю сразу, что именно по этой ссылке находится решение. И форум этот я хочу скорей закрыть.
                                                  Во-вторых, я мог начать набирать ответ и его нельзя потерять.
                                                  Тот редкий случай, когда бы я простил сайту confirm на unload.
                                                    +1
                                                    Для случаев, когда пользователь начал набирать текст и случайно закрыл страницу, нужно реализовывать сохранение данных, введенных в форму. Это немного сложнее confirm на unload или там target blank, но более адекватно.
                                                      +1
                                                      Сохранять данные в форме полезно, но это должно быть дополнительным эшелоном защиты, а не единственным.
                                                      Лучше избежать проблемы вообще, чем подпирать её костылями.
                                                        0
                                                        Ну, confirm без js не реализовать, насколько я понимаю.

                                                        А раз так, то лучше уж сделать изящное решение: настройки сохранять автоматически, какие-нибудь контентные данные, чаты, статьи — сохранять данные в форме и восстанавливать при релоаде.
                                                        Пароли не сохранять, понятно. Сверху к этому прикрутить сохранение данных при потере сети в local storage или вроде того.

                                                        В идеальном случае пользователь просто не заметит этого всего. А вот если что-то пойдет не так — будет приятно удивлен.

                                                        Полностью проблемы не избежать, в конце концов. Более того, меня бы раздражало сообщение при закрытии страницы, если я вдруг передумал отправлять форму.
                                                    0
                                                    Есть задумка автора сайта/[UX-]дизайнера/… и есть ваши личные хотелки. Я считаю что у _обоих_ должен быть инструмент влияния на то, что происходит при щелчке на ссылку. Мне как пользователю бывает досадно, например, когда забыл «принудить» новую вкладку, а сайт со своей стороны тоже не позаботился. Представляешь, если «нагоняешь» непрочитанные сообщения в какой-нить «infinite-scroll» ленте, позицию в которой не восстановишь кнопкой ;-)

                                                    P.S.: возможно, в браузеры не помешало бы добавить функцию «открыть принудительно в текущей вкладке» (по аналогии с контрол-кликом), но это не отменяет полезности тэга «target».
                                                      +1
                                                      В Опере 12 есть принудительное открытие в текущей вкладке (правый клик — Открыть).
                                                        +1
                                                        «infinite-scroll» ленте
                                                        То есть проблема в _blank, а не в таких лентах?

                                                        Меня на Ютубе сие бесит. Для долгосрочных дискуссий интерфейс вообще не пригодный. Пагинацией и не пахнет, просмотром отдельных комментариев тоже. Поискал расширения какие, приложения для комментирования — не видать. Думал сам что-то наварганить, глянул запросы — а там AJAX куски HTML возвращает, как в старые добрые. Гляну публичный API ещё, может, хоть там что-то вменяемое.
                                                    –1
                                                    Не знаю за что Вас так заминусовали, но я согласен с вами (Жаль, что нет кармы апнуть коммент). target="_blank" — это одна из причин, почему я не могу пользоваться яндекс поиском, ужасно раздражает!
                                                      –1
                                                      Я тем более не понимаю, почему люди, кричащие о недопустимости контроля Интернета со стороны государства, принуждают меня открывать ссылки в новых вкладках, потому что НАМ ТАК ВЫГОДНО!!!11.

                                                      Напомнило


                                                      К счастью, запас ранее накопленной кармы позволяет со спокойствием относиться к такому весеннему обострению.
                                                        +2
                                                        не то слово.
                                                        «Не умножай сущности без необходимости», говорят тебе мудрые олдскульные разработчики, %юзернейм%
                                                        +3
                                                        жму руку!

                                                        (как же раздражает невозможность плюсануть комментарий старее пары дней.
                                                        Если ты в основном занят и читаешь сайт эпизодически или случайно обнаружил интересный топик в еженежельном дайджесте, то, увы… упс. Ты превращаешься в пассивного наблюдателя. В результате чего возможность поставить оценку остается только у специального контингента юных бездельников (не в обиду юным бездельникам будет сказано), у которых, должно быть масса времени на ежедневное чтение всякой «цифровой макулатуры», что безусловно сказывается на качестве материалов и в перспективе приведет Хабру к полному унынию. К бабке, что называется, не ходи).
                                                          +5
                                                          Хотел плюсануть ваш комментарий, но не смог — срок уже вышел! :)
                                                        +1
                                                        Или открывать ссылки в той же самой вкладке, без любых извращений. Если пользователю надо — он сам откроет в новой вкладке. Сайты стали слишком много решать за нас, мне кажется.
                                                          +10
                                                          На хабре: тыц тыц
                                                            +12
                                                            У меня такая привычка: если хочу открыть ссылку в новой вкладке, то жму на колесо мыши(браузер Chromium). При таком раскладе подмены страницы не происходит, а если просто кликнуть левой кнопкой то подмена работает.
                                                            Какая полезная привычка :)
                                                              +4

                                                              У меня такая же привычка. Ещё со времен, когда нужно было некоторое время ждать загрузки страницы. Открываешь новую страницу через колесо мыши и пока она грузится ты дочитываешь прошлую страницу. С таким раскладом и правда не работает данная уязвимость, подтверждаю :)

                                                                0
                                                                Сработает так же при ctr + click, только пример на это не рассчитан так как пользователь сразу заметит срабатывание редиректа на странице, на которой нажал на ссылку. По идее решается переносом кода в window.onfocus
                                                                  +1
                                                                  При таком раскладе подмены страницы не происходит

                                                                  Что кстати говоря ещё больше удивляет — а зачем они сделали именно такое поведение для target=_blank? По логике вещей открытие колесом или иным способом в новой вкладке вручную, не должно принципиально отличаться от target=_blank. Т.е. или этого несчастного opener-а не должно быть вовсе, либо он должен быть и при middle-клик-открытии.

                                                                    0
                                                                    Я так понимаю поведение при клике левой кнопкой по ссылке с «target=_blank» каким-то образом стандартизировано, а вот клик колесом это уже функционал конкретного браузера и они сделали как им хотелось(без opener'а).
                                                              0
                                                              deleted
                                                                +8
                                                                Фейсбук быстро среагировал )
                                                                При просмотре вашего поста и переходе по ссылке(фишинг, все дела), меня разлогинивает в оригинальном ФБ, и после логина вижу:

                                                                «Ваш аккаунт временно заблокирован»....«Скорее всего, ваш аккаунт был взломан в результате ввода вашего пароля на похожем на Facebook веб-сайте. Такой тип атаки называется фишингом. Подробнее в Справочном центре.»

                                                                Похоже они как-то автоматически палят потенциальный фишинг, включая window.opener и помечают аккаунты как suspicious
                                                                  +2
                                                                  Продолжу: если вы не уверены, что сможете сразу ввести код проверки из смс или ответ на контрольный вопрос для разблокировки аккаунта — не ходите по ссылке на пост FB из примера.
                                                                    +4
                                                                    Ещё пароль заставили сменить. Хорошо бы в статью предупреждение добавить.
                                                                      +6
                                                                      Добавил, скрыл публикацию в FB.
                                                                    +2
                                                                    Это было трудно, но я всё-таки прошёл капчу фейсбука.
                                                                    +3

                                                                    Опа… в Firefox rel="noopener" пока еще не работает :(

                                                                      +4
                                                                      Да, действительно. Зато работает rel=«noreferrer»
                                                                      0

                                                                      Это хорошо! Пойду добавлю к ссылкам rel="noopener noreferrer"

                                                                        +1
                                                                        Одновременно поломав передачу HTTP_REFERER по вашим ссылкам. В лучшем случае принимающая сторона не посчитает вас, как источник трафика, в худшем могут не засчитать какие-то рекламные переходы… не очень хороший костыль
                                                                          0
                                                                          Это имеет смысл в поисковиках. Я натыкался на сайты, которые вызывали условный редирект, для некоторых рефереров (поисковиков). Пока я не врубился, что происходит (пришлось подебажить сайт, хорошо быть клиентским разработчиком), не смог прочитать нужную мне информацию. Естественно, гневный отзыв владельцу сайта был написан, но я не проверял, услышан ли он был.
                                                                            0
                                                                            Только что протестил, всё еще хуже, в том числе в обозримом будущем…
                                                                            rel=«noopener» — так же лишает HTTP_REFERER (Chrome 49.x), т.е. очень похоже что это «костыль» или alias на всё тот же nofollow… всё плохо в индустрии… :(
                                                                        0
                                                                        А я как-то пытался вообще бороться с этим target=_blank и в общем не нашёл нормального метода без использования Firefox addons. Есть, например, такой способ:
                                                                        about:config:
                                                                        set browser.link.open_newwindow 1

                                                                        Отлично работает, но если кликать где-то вне браузера, то активная ссылка в браузере заменится той, на которую кликнули, вместо открытия новой вкладки. Так что решение не подходит.
                                                                        А нужно было это затем, что:
                                                                        1) да, я опытный пользователь и знаю как и где мне открыть новую вкладку, если это нужно;
                                                                        2) напрягают сайты, которые в своей же строке поиска уводят меня на другую вкладку, хотя я перемещаюсь в пределах одного и того же сайта. (например поиск azlyrics.com).
                                                                          +1
                                                                          Дыра в CSP. Поправят в 3 версии, собсна как и проблеу с
                                                                          <a href=blob://></a>
                                                                          
                                                                            0
                                                                            Это точно распространяется на https?
                                                                            +9
                                                                            В 2013 об этом уже писали на Хабре. А потом писали ещё в 2014.
                                                                              +10
                                                                              На хабре много подобных стабильно «повторяемых» тем. Чего стоят регулярки и валидация email :)
                                                                              +4
                                                                              Уже давно эксплуатируется недобросовестными рекламщиками: клик по банеру открывает новую вкладку, в которой открывается страница, с которой перешли, а в предыдущей вкладке открывается рекламируемый сайт.
                                                                              В чем преимущество такого поведения не понятно, но напрягает. Интуитивно закрываешь рекламную страницу, теряешь историю, введенную информацию и тд.
                                                                                +2
                                                                                Именно в этом и заключается их цель — отучить пользователя на автомате за пол секунды закрывать еще не прогрузившуюся рекламную страницу.
                                                                                  0
                                                                                  а как это лечить?
                                                                                    0
                                                                                    Написать расширение к браузеру. И на каждую страницу добавлять это:

                                                                                    window.opener = null;
                                                                                    
                                                                                –5
                                                                                Давным-давно уже разобрали эту тему юзабилити эксперты (например, Якоб Нильсен еще в 1999 году). К сожалению, не смог найти более развернутый пост на эту тему, но полностью согласен: существует несколько способов отрыть ссылку в новом окне, но не существует ни одного способа открыть ее в это же окне, если вы прописали там target.

                                                                                После этого аттрибут target был удален из Strict спецификаций (HTML4 & XHTML), ну да кто об этом знает? Все просто писали себе doctype-ы.

                                                                                А вранье про заботу о мобильных клиентах, которые хотят открыть ссылку в новой вкладочке. Я уж не говорю, что загруженные страницы нынче могут сжирать неприлично памяти, но есть еще и ограничение на количество открытых окон браузера. Или вы сейчас скажете, что никогда не встречали уведомления, что «Достигнут максимум открытых окон, ссылка открыта не будет».

                                                                                Перестаньте использовать эту мерзость. Займитесь лучше повышением культуры пользования браузером у ваших мам. Кстати да, моя мама не понимает что такое новая вкладка, или, например, другой документ в MDI-интерфейсе (Word & Excel, например, хотя эти нынче используют нестандартную реализацию с выносом кнопки в панель задач). А кнопки Вперед-Назад у нее всегда на виду и предельно понятны. И кстати, на телефоне кнопка Назад аж хардварная.

                                                                                Ну и коротенько о «оставить ценного пользователя на своем сайте». Когда пользователь начинает подчищать вкладки, уверен на 70%, что он закроет и Ваш сайт, не льстите себе. А иногда и случайно ткнув крестик.

                                                                                Так что перестаньте нести ерунду! Оставьте за пользователем право открыть ссылку, как ему нравится.
                                                                                  +1
                                                                                  Для случайного клика на крестик есть Ctrl+Shift+T
                                                                                    –1
                                                                                    >А вранье про заботу о мобильных клиентах, которые хотят открыть ссылку в новой вкладочке.
                                                                                    Я хочу, чтобы ссылки открывались в новой вкладке по дефолту, когда я с планшета. Да и не только когда я с планшета, а, пожалуй, всегда. А если я захочу открыть ссылку в той же вкладке я согласен сделать контрол-клик.

                                                                                    >Я уж не говорю, что загруженные страницы нынче могут сжирать неприлично памяти
                                                                                    Плевать, у меня в планшете 4ГБ оперативы.

                                                                                    >Или вы сейчас скажете, что никогда не встречали уведомления, что «Достигнут максимум открытых окон, ссылка открыта не будет».
                                                                                    Никогда не встречал.

                                                                                    >А кнопки Вперед-Назад у нее всегда на виду и предельно понятны
                                                                                    Нажимая кнопку «назад» на Хабре с сношу себе всю статистику по непрочитанным комментам. Восстановить эту информацию невозможно, насколько я понимаю.

                                                                                    Я открываю страницу в той же вкладке в 2 случаях, когда я целенаправленно хочу уйти с сайта и когда я перехожу на новую страницу форума/ленты хабра/etc. В остальных 98% случаев я всегда открываю ссылку в новой вкладке. Так что, юзкейсы у всех разные, не нужно думать, что ваш единственно верный.
                                                                                      –1
                                                                                      Вы кагбэ и не противоречили мне. Ну почти. По-крайней мере в той части, где вы целенаправленно хотите уйти с сайта. Так вот, если владелец непонравившегося вам сайта решил, что вам нужно открыть новую вкладку, у вас не останется выбора. Речь в моем посте, и исследованиях британских ученых, если хотите, именно об этом.

                                                                                      Еще раз. Вам никто не запрещает открыть ссылку в новом окне. Но расскажите мне, где вы видели пункт меню в браузере «Открыть в этой же вкладке»
                                                                                        0
                                                                                        Ну как же не противоречит, когда я на все ваши аргументы привел контраргументы?

                                                                                        Еще раз. Вам никто не запрещает открыть ссылку в новом окне. Но расскажите мне, где вы видели пункт меню в браузере «Открыть в этой же вкладке»

                                                                                        Еще раз, я хочу, чтобы можно было все ссылки всегда открывать вмновом окне и только по специальному действию типа контрол-клик открывать их в том же. Сейчас браузеры не имеют подобной настройки, открывать ссылки в новом окне на планшете неудобно. Поэтому я рад, что разработчики некоторых сайтов идут навстречу пользователям. Конечно, было бы лучше, чтобы подобное поведение настраивалось, но пока имеем, что имеем.

                                                                                        В конце концов вам никто не мешает скопировать адрес ссылки и вставить ее в адресную строку того же окна. Или кликнуть на ссылку и нажать на крестик.
                                                                                          0
                                                                                          Когда-то был MyIE там была такая настройка.
                                                                                    0
                                                                                    У меня Google Chrome 50 последней версии — линки в статье не срабатывают.
                                                                                    Хотя апдейтов браузера не было крайние 2 дня.
                                                                                      0
                                                                                      Chrome 52 — работает.
                                                                                        +1
                                                                                        52? Тестовая, что ли?

                                                                                        Версия 50.0.2661.94 m
                                                                                        Вы используете самую новую версию Chrome.
                                                                                          0
                                                                                          Зачем минусовать-то?
                                                                                          У меня и сейчас показывает свежую стабильную версию как 50.0.2661.94 m
                                                                                          Вот пруф
                                                                                          image
                                                                                            –4
                                                                                            Не «зачем», а «почему». Потому что тут не «кружок кройки и шитья», а Хабр. Место, где людей, не знающих о том, как разрабатываются и выпускаются браузеры, в общем-то, быть не должно.

                                                                                            Одно дело — увидеть подобные «перлы» от бухгалтера, другое — от web-разработчика.
                                                                                              0
                                                                                              В курсе как они разрабатываются и выпускаются. Так как крайний стабильный релиз именно 50 версии, вот и уточнил не пользуется ли сей камрад «ночной» сборкой aka тестовой. Всего лишь.
                                                                                        0
                                                                                        Работает ссылка для Хабра.
                                                                                          0
                                                                                          Действительно, работает.
                                                                                          Походу глюк был в компе в прошлый раз.
                                                                                        +1
                                                                                        Сколько лет работаю в веб-деве, но в шоке от этой статьи
                                                                                          +1
                                                                                          Статья-то ладно, а вот дырки в технологии…
                                                                                          0
                                                                                          Только что обновил оперу, все еще работает(
                                                                                            +1
                                                                                            Я думаю это поведение останется таким и в будущем, ради обратной совместимости, т.к. _blank, является дочерним фреймом (если формально).
                                                                                            А вот rel=«noopener» должен выключать такое поведение. Т.е. у разработчика есть выбор какое поведение ему нужно.

                                                                                            Де факто, же это «гадость полнейшая», когда речь о cross-domain scope.

                                                                                            P.S.: Может можно на серверной стороне поотключать средствами заголовков, типа Server-Side Access Control через HTTP_ORIGIN?
                                                                                              +1
                                                                                              P.P.S: Увы, вынужден растоптать надежды, HTTP-заголовком Access-Control-Allow-Origin: selfdomain это не решается, как с гуся вода, это только для XMLHttpRequest канает и то с целью наоборот.

                                                                                              Вижу только один путь: раз это «баг» идёт от JS, то JS-ом он и должен решаться, у кого js не работает, у того и «баг» не работает — всё просто.
                                                                                              А js-ом это как раз полечить можно вдоль и поперёк.
                                                                                                0
                                                                                                А js-ом это как раз полечить можно вдоль и поперёк.

                                                                                                Какое конкретно решение Вы предлагаете?
                                                                                                  0
                                                                                                  1. пройтись по всем <a> и добавить им noopener в ref.
                                                                                                  2. переопределить window.open и стирать window.opener у всех новооткрываемых окон.
                                                                                                    0
                                                                                                    Логично. Про перекрытие мне в голову не пришло.
                                                                                                      0
                                                                                                      Да, только в обоих случаях выше HTTP_REFERER — тоже потеряется, увы (сам удивляюсь зачем это в жесткой связке стоит)
                                                                                            +7
                                                                                            Интересно, почему window.opener не ограничен только для текущего домена?
                                                                                              +6
                                                                                              И главное почему об этом никто не знал?
                                                                                                0
                                                                                                Строго говоря, потому что в этом нет ничего плохого. К контенту страницы кроссдоменного доступа нет. И даже не ко всем свойствам окна он имеется.
                                                                                                  0
                                                                                                  Как видите и тех что доступны оказалось достаточно.
                                                                                                0
                                                                                                В Safari 9.1 не работает.
                                                                                                  0
                                                                                                  FF 45.0.2
                                                                                                    0
                                                                                                    Так вот, как это делается!
                                                                                                      0
                                                                                                      На сайте компании где работаю от target="_blank" мы отказались вообще, у нас есть url через который происходят редиректы на все сторонние ресурсы.
                                                                                                        0
                                                                                                        но на этот-то то урл вы с target="_blank" конечно ходите, а поделитесь как делаете редирект чтобы максимально гарантировано сохранить рефера
                                                                                                          0
                                                                                                          1) На свой урл да
                                                                                                          2) Все ссылки имеют свой хэш и по этому хэшу происходит редирект, ссылками управляют контентщики они головой отвечают что все ссылки валидны. У нас агрегатор, то каждая ссылка очень жирно проплачена и договор не нее есть, так что на этом не заворачиваемся.
                                                                                                        +1
                                                                                                        Я это репортил в FB года два назад. Они мне сказали, что это known issue, но по тону было похоже на «нам пофиг».
                                                                                                          0
                                                                                                          Пару лет назад, в январе, был уже подобный пост. Не могу найти оригинал, автор выпилился с хабра, но тема в принципе совсем не нова.
                                                                                                            0
                                                                                                            У меня не срабатывал на клик колесиком, но зато при клике ЛКМ срабатывал
                                                                                                              +1
                                                                                                              Таким грешат многие сайты, а некоторые, даже не считают это за проблему «на своей стороне»
                                                                                                              Воу воу воу, то что там «с формой бобра» по ссылке — это совсем из другой оперы, да и повеселее будет — это подмена url'a в адресной строке на «чтохочу.com» и она работает в Chrome.
                                                                                                              Вот это день «интересных историй»… я думал такие забавы остались где-то в середине 00-ых… печаль.
                                                                                                                +1
                                                                                                                Если почитать, это не подмена урла, это комбинация работы с опенером (таба открытая с недоверенного ресурса всё ещё контролируется этим ресурсом) и хитрости с подменой легитимной страницы на очень быстро грузящуюся data:html страницу (так, чтобы перезагрузка была не видна пользователю).
                                                                                                                +2
                                                                                                                Спасибо, никогда не задумывался об этом.
                                                                                                                  0
                                                                                                                  Господа, все таки предлагаю сделать вывод под всем выше сказанным и статьей и провести черту. Каким образом поступить с target="_blank"? При условии, что это работает там, это не работает там, костыль из javascript. Спасибо.
                                                                                                                    +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 есть -->
                                                                                                                      0
                                                                                                                      Яндекс-браузер 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.


                                                                                                                      На более свежих версиях ещё не проверял, — может быть, эту защиту сломали.
                                                                                                                        0
                                                                                                                        Похоже не на защиту, а на какую-то ошибку. Вы точно это не пытались проверять на файлах на диске (где это, понятно, и не могло работать) или как-нибудь ещё «странно» сконфигурировать свою тест-систему?
                                                                                                                          0
                                                                                                                          А и впрямь! Конечно, я попытался проверить в песочнице.
                                                                                                                          Окей, поставлю коллег в известность, что существует не только дырка в безопасности, но ещё и баг. Может, доберутся и пофиксят.
                                                                                                                        –5
                                                                                                                        Вот это ЛОЛ! А хотите прикол? В Китае ВСЕ сайты открывают ВСЕ линки в новой вкладке. Учитывая поголовную компьютерную неграмотность пользователя, подозреваю что можно кучу всего наловить у них!

                                                                                                                        М, да-а-а, *facepalm*.
                                                                                                                          0
                                                                                                                          Если кто ещё пользуется Opera 12, то в ней эта гадость (доступ к window.opener) распространяется не только на ссылки, открытые с target=_blank, но и вообще все ссылки, открытые колёсиком или пунктом «открыть в новой вкладке».

                                                                                                                          Выломать это можно так: пропатчить opera.dll, изменив строку «opener» на «opera», 0.
                                                                                                                          Для Opera 12.18, 32-bit, Windows это будет по адресу 0C6E414.

                                                                                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                                          Самое читаемое