Большинство создают внешние ссылки через 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.

Комментарии (129)


  1. faiwer
    03.05.2016 17:19
    +28

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


  1. maxtm
    03.05.2016 17:58
    +9

    Вот это да! Это же сколько всяких пакостей можно наделать то…


  1. FrozenInternet
    03.05.2016 17:58
    +15

    Хорошо бы писать источник, откуда берете информацию.
    mathiasbynens.github.io/rel-noopener


  1. enabokov
    03.05.2016 18:03
    +1

    Есть у одних решений какие-то преимуществ/недостатки перед другими? Вот мне больше нравится первое за простоту. Зачем мне может понадобиться использовать какое-то другое решение?


    1. ganjar
      03.05.2016 18:32
      +1

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


  1. kafeman
    03.05.2016 18:06
    -9

    5. Не использовать target="_blank". Очень раздаражают сайты, которые считают, что они умнее меня. Я сам в состоянии решить, в какой вкладке мне нужно открыть ссылку.


    1. aliencash
      03.05.2016 18:39
      +42

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


      1. profesor08
        03.05.2016 19:27
        -6

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


        1. zharikovpro
          03.05.2016 19:33
          +26

          > Все просто, все логично, все удобно.

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


          1. Mingun
            03.05.2016 20:07
            -26

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


            1. zharikovpro
              03.05.2016 20:52
              +21

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

              Пользуются им без кнопки back, упорно идут только вперед к заветной цели, не делая ни шагу назад! :)


          1. kafeman
            03.05.2016 21:30
            -2

            Я вас разочарую. Пользователи, не знающие о кнопке Back, не смогут закрыть/перейти на другую вкладку. Этот вывод я сделал на основе длительных наблюдений за неопытными пользователями.


            1. zharikovpro
              03.05.2016 21:42
              +11

              Лично я не наблюдал за многими неопытными пользователями. Но точно знаю, что закрывать вкладки моя мама умеет, а пользоваться кнопкой back — нет. Весьма платежеспособный клиент, активно пользующийся интернет-магазинами и сайтами типа booking.com


              1. zharikovpro
                03.05.2016 21:50
                +2

                C target="_blank" ей удобно если что просто закрыть вкладку с проблемным платежом через внешний биллинг например и сделать новую попытку оплаты товара, нажав кнопку Оплатить на сайте магазина. С кнопкой back это практически невозможно, т.к. процесс оплаты часто многостраничный и можно быстро уйти далеко от исходной страницы. А открывать такие ссылки принудительно в новой вкладке рефлекса нет.


                1. Agel_Nash
                  04.05.2016 01:32
                  +1

                  рефлекса нет

                  Все люди разные. Я, например, практически все ссылки открываю через ctrl


                  1. Helldar
                    04.05.2016 03:46
                    +5

                    У меня на это дело выделена целая кнопка-колесо мыша)


                    1. Vedomir
                      05.05.2016 09:55

                      В Firefox с помощью плагинов (например Tab Mix Plus) открытие в новой вкладке делается стандартным поведением.


            1. EvilFox
              03.05.2016 22:06

              1. EvilFox
                03.05.2016 22:12
                +1

                Вот что раздражает когда хабр этот _blank пихает зачем-то для внутренних ссылок.


                1. Helldar
                  04.05.2016 03:48

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


                  1. Alexeyslav
                    04.05.2016 08:26
                    +3

                    Кроме того, ещё и сбросятся все «непрочитанные» комментарии.


                    1. EvilFox
                      04.05.2016 15:18
                      +4

                      В случае если ссылка ведёт на эту же страницу комментарии не потеряются.
                      А вообще сброс непрочитанных комментариев при обновлении страницы плохая идея.


                  1. EvilFox
                    04.05.2016 15:16
                    +1

                    Это не сложно определить ведёт он на другую или на эту страницу. Я говорю о ссылках на комментарий на текущую страницу.
                    Тут же якори. Нажал просто переместило на позицию комментария, без обновления страницы. Нажал назад опять же переместило обратно без обновления. Пролистывать не нужно.


        1. funnybanana
          03.05.2016 19:34
          +5

          ммм… а попробуйте нажимать колесиком ;-)

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


          1. profesor08
            03.05.2016 20:16
            +2

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

            И говорю от лица опытного пользователя. Которорый перекращает пользоваться сайтами, которые ведут себя непредсказуемо.


            1. khim
              03.05.2016 20:33
              +2

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

              Культурные особенности, кстати: в US, к примеру, Гугл так себя не ведёт по умолчанию, а в России… пришлось, да.


              1. profesor08
                03.05.2016 20:38

                У нас похоже разные понятия о предсказуемости. Раз столько негатива вызывает просто уточнение в ответ на непонимает, то нестоит что-то обсуждать.


              1. kafeman
                03.05.2016 21:37

                Контрольный вопрос: чем вы пользуетесь вместо Гугла и Яндекса?
                DuckDuckGo. Технически, возмозможно, это результататы Google или Яндекс, но с точки зрения конечной веб-страницы, очень адекватный сайт.


            1. sdore
              03.05.2016 21:43
              +1

              средним колесиком мыши
              А есть другие?!


              1. profesor08
                03.05.2016 21:57
                +2

                Ага. Например у Logitech MX Master


              1. pasha_golub
                04.05.2016 11:56
                +1

                Ctrl + Mouse Left Button


          1. foxmuldercp
            03.05.2016 23:27
            +4

            Особенно «колёсико» актуально на смартфоне и планшете.
            Извините, наболело как со стороны пользователя, так и боль со стороны разработчика.


        1. EvilFox
          03.05.2016 22:05

          Ага… особенно хорошо когда после перехода по такой ссылке убивается история переходов и назад уже не вернуться (уже не мало раз натыкался на такие сайты). Уж лучше в этом плане предсказуемый target="_blank" для внешних сайтов.


          1. EvilFox
            03.05.2016 22:19
            +1

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


            1. profesor08
              03.05.2016 23:34

              Ну как сказать. В адресной строке есть такой параметр — newwindow=1. Вот он и отвечает за то, чтоб ссылки открывались в текущем окне или в новом. А раз он там есть, то должна быть и настройка, чтоб его менять.


              1. EvilFox
                03.05.2016 23:57

                Да, сейчас вижу есть настройка. Спасибо.


      1. Miraage
        03.05.2016 22:25
        -11

        Очень стыдно за человечество, которое не знает про Ctrl+Click, Alt+Click.


        1. foxmuldercp
          03.05.2016 23:28
          +9

          Сделаете такое для планшетов и смартфонов — подозреваю, что прогремите на весь ИТ мир.


          1. fzzr
            04.05.2016 10:23
            +6

            Прошу простить, если я что-то не понимаю, но есть же вполне полноценные long-press (iOS, Andr.) и всякие новые 3D-Touch (iOS only). Все знакомые мне матери, включая мою, с этим справляются.


        1. trevoga_su
          04.05.2016 15:38
          -3

          лол )))

          только айтишники считают, что мир ограничен рамками их индустрии и все должны поголовно, как в КНДР, знать ПК как биографию Ким ир сена


        1. igordata
          05.05.2016 12:28
          +1

          Вторая рука занята, друг, рука занята!


    1. Zenitchik
      03.05.2016 18:41

      del


    1. dom1n1k
      03.05.2016 21:14
      +2

      Есть много ситуаций, когда использование target=_blank объективно полезно и даже необходимо.


      1. kafeman
        03.05.2016 21:28
        -6

        Было бы интересно взгялнуть на пример.

        Я вот считаю, что никакой автоматический алгоритм эту задачу решить не может (если бы мог, я бы уже давно написал расширение для своего браузера). На примере того же Facebook: иногда я нахожу сам пост бесполезным, и все, что мне нужно — поскорее перейти на сайт. А иногда я хочу присоединиться к дисскусии в комментариях, и после просмотра сайта я хочу вернуться в то же место, с которого начал. Итого, мое решение об открытии ссылки в той же вкладке, или в новой, принимается мной на основе анализа содержимого исходной страницы. И простыми регулярками тут уже не обойдешься.


        1. dom1n1k
          03.05.2016 21:33
          +3

          Самое банальное — форумы/комментарии и ссылки в них на внешние сайты.
          Во-первых, я ещё не дочитал обсуждение и почти наверняка захочу к нему вернуться.
          Во-вторых, я мог начать набирать ответ и его нельзя потерять.


          1. kafeman
            03.05.2016 21:43
            -4

            Во-первых, я ещё не дочитал обсуждение и почти наверняка захочу к нему вернуться.
            Зависит от того, как я попал на этот сайт. Если я искал решение проблемы через Google, то этот форум — только дополнительный посредник. В большинстве случаев я понимаю сразу, что именно по этой ссылке находится решение. И форум этот я хочу скорей закрыть.
            Во-вторых, я мог начать набирать ответ и его нельзя потерять.
            Тот редкий случай, когда бы я простил сайту confirm на unload.


          1. eoffsock
            03.05.2016 21:57
            +1

            Для случаев, когда пользователь начал набирать текст и случайно закрыл страницу, нужно реализовывать сохранение данных, введенных в форму. Это немного сложнее confirm на unload или там target blank, но более адекватно.


            1. dom1n1k
              03.05.2016 22:01
              +1

              Сохранять данные в форме полезно, но это должно быть дополнительным эшелоном защиты, а не единственным.
              Лучше избежать проблемы вообще, чем подпирать её костылями.


              1. eoffsock
                03.05.2016 22:09

                Ну, confirm без js не реализовать, насколько я понимаю.

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

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

                Полностью проблемы не избежать, в конце концов. Более того, меня бы раздражало сообщение при закрытии страницы, если я вдруг передумал отправлять форму.


        1. mityukov
          04.05.2016 15:18

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

          P.S.: возможно, в браузеры не помешало бы добавить функцию «открыть принудительно в текущей вкладке» (по аналогии с контрол-кликом), но это не отменяет полезности тэга «target».


          1. CaptainFlint
            04.05.2016 19:40
            +1

            В Опере 12 есть принудительное открытие в текущей вкладке (правый клик — Открыть).


    1. Vit1
      04.05.2016 13:45
      -1

      Не знаю за что Вас так заминусовали, но я согласен с вами (Жаль, что нет кармы апнуть коммент). target="_blank" — это одна из причин, почему я не могу пользоваться яндекс поиском, ужасно раздражает!


      1. kafeman
        04.05.2016 14:57
        -1

        Я тем более не понимаю, почему люди, кричащие о недопустимости контроля Интернета со стороны государства, принуждают меня открывать ссылки в новых вкладках, потому что НАМ ТАК ВЫГОДНО!!!11.

        Напомнило


      1. aureliano_b
        12.05.2016 17:16
        +2

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


    1. aureliano_b
      12.05.2016 17:15
      +3

      жму руку!

      (как же раздражает невозможность плюсануть комментарий старее пары дней.
      Если ты в основном занят и читаешь сайт эпизодически или случайно обнаружил интересный топик в еженежельном дайджесте, то, увы… упс. Ты превращаешься в пассивного наблюдателя. В результате чего возможность поставить оценку остается только у специального контингента юных бездельников (не в обиду юным бездельникам будет сказано), у которых, должно быть масса времени на ежедневное чтение всякой «цифровой макулатуры», что безусловно сказывается на качестве материалов и в перспективе приведет Хабру к полному унынию. К бабке, что называется, не ходи).


  1. Alex_ME
    03.05.2016 18:06
    +1

    Или открывать ссылки в той же самой вкладке, без любых извращений. Если пользователю надо — он сам откроет в новой вкладке. Сайты стали слишком много решать за нас, мне кажется.


    1. ganjar
      03.05.2016 18:22
      +10

      На хабре: тыц тыц


      1. Kendrick
        03.05.2016 19:04
        +12

        У меня такая привычка: если хочу открыть ссылку в новой вкладке, то жму на колесо мыши(браузер Chromium). При таком раскладе подмены страницы не происходит, а если просто кликнуть левой кнопкой то подмена работает.
        Какая полезная привычка :)


        1. ComradeAndrew
          03.05.2016 19:06
          +4

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


        1. ganjar
          03.05.2016 19:09

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


        1. faiwer
          03.05.2016 21:24
          +1

          При таком раскладе подмены страницы не происходит

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


          1. Kendrick
            03.05.2016 21:34

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


  1. ganjar
    03.05.2016 18:24

    deleted


  1. invented
    03.05.2016 18:27
    +8

    Фейсбук быстро среагировал )
    При просмотре вашего поста и переходе по ссылке(фишинг, все дела), меня разлогинивает в оригинальном ФБ, и после логина вижу:

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

    Похоже они как-то автоматически палят потенциальный фишинг, включая window.opener и помечают аккаунты как suspicious


    1. Sabin
      03.05.2016 18:49
      +2

      Продолжу: если вы не уверены, что сможете сразу ввести код проверки из смс или ответ на контрольный вопрос для разблокировки аккаунта — не ходите по ссылке на пост FB из примера.


      1. ProRunner
        03.05.2016 18:51
        +4

        Ещё пароль заставили сменить. Хорошо бы в статью предупреждение добавить.


        1. ganjar
          03.05.2016 18:59
          +6

          Добавил, скрыл публикацию в FB.


    1. enabokov
      03.05.2016 19:59
      +2

      Это было трудно, но я всё-таки прошёл капчу фейсбука.


  1. JekaRu
    03.05.2016 19:18
    +3

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


    1. ganjar
      03.05.2016 19:21
      +4

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


  1. JekaRu
    03.05.2016 19:43

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


    1. cybernomix
      04.05.2016 12:44
      +1

      Одновременно поломав передачу HTTP_REFERER по вашим ссылкам. В лучшем случае принимающая сторона не посчитает вас, как источник трафика, в худшем могут не засчитать какие-то рекламные переходы… не очень хороший костыль


      1. Zenitchik
        04.05.2016 15:22

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


        1. cybernomix
          04.05.2016 17:02

          Только что протестил, всё еще хуже, в том числе в обозримом будущем…
          rel=«noopener» — так же лишает HTTP_REFERER (Chrome 49.x), т.е. очень похоже что это «костыль» или alias на всё тот же nofollow… всё плохо в индустрии… :(


  1. conformist
    03.05.2016 19:58

    А я как-то пытался вообще бороться с этим target=_blank и в общем не нашёл нормального метода без использования Firefox addons. Есть, например, такой способ:
    about:config:
    set browser.link.open_newwindow 1

    Отлично работает, но если кликать где-то вне браузера, то активная ссылка в браузере заменится той, на которую кликнули, вместо открытия новой вкладки. Так что решение не подходит.
    А нужно было это затем, что:
    1) да, я опытный пользователь и знаю как и где мне открыть новую вкладку, если это нужно;
    2) напрягают сайты, которые в своей же строке поиска уводят меня на другую вкладку, хотя я перемещаюсь в пределах одного и того же сайта. (например поиск azlyrics.com).


  1. front_end
    03.05.2016 20:48
    +1

    Дыра в CSP. Поправят в 3 версии, собсна как и проблеу с

    <a href=blob://></a>
    


  1. youROCK
    03.05.2016 20:48

    Это точно распространяется на https?


    1. ganjar
      03.05.2016 20:53

      да


  1. MaGIc2laNTern
    03.05.2016 23:40
    +9

    В 2013 об этом уже писали на Хабре. А потом писали ещё в 2014.


    1. BeLove
      04.05.2016 01:00
      +10

      На хабре много подобных стабильно «повторяемых» тем. Чего стоят регулярки и валидация email :)


  1. MNB
    04.05.2016 00:22
    +4

    Уже давно эксплуатируется недобросовестными рекламщиками: клик по банеру открывает новую вкладку, в которой открывается страница, с которой перешли, а в предыдущей вкладке открывается рекламируемый сайт.
    В чем преимущество такого поведения не понятно, но напрягает. Интуитивно закрываешь рекламную страницу, теряешь историю, введенную информацию и тд.


    1. Alexsmt
      04.05.2016 01:08
      +2

      Именно в этом и заключается их цель — отучить пользователя на автомате за пол секунды закрывать еще не прогрузившуюся рекламную страницу.


      1. Sergey6661313
        08.05.2016 19:41

        а как это лечить?


        1. REZ1DENT3
          10.05.2016 10:07

          Написать расширение к браузеру. И на каждую страницу добавлять это:

          window.opener = null;
          


  1. alexpogodin
    04.05.2016 02:29
    -5

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

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

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

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

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

    Так что перестаньте нести ерунду! Оставьте за пользователем право открыть ссылку, как ему нравится.


    1. bopoh13
      04.05.2016 14:47
      +1

      Для случайного клика на крестик есть Ctrl+Shift+T


    1. Dolios
      04.05.2016 14:55
      -1

      >А вранье про заботу о мобильных клиентах, которые хотят открыть ссылку в новой вкладочке.
      Я хочу, чтобы ссылки открывались в новой вкладке по дефолту, когда я с планшета. Да и не только когда я с планшета, а, пожалуй, всегда. А если я захочу открыть ссылку в той же вкладке я согласен сделать контрол-клик.

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

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

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

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


      1. alexpogodin
        04.05.2016 19:11
        -1

        Вы кагбэ и не противоречили мне. Ну почти. По-крайней мере в той части, где вы целенаправленно хотите уйти с сайта. Так вот, если владелец непонравившегося вам сайта решил, что вам нужно открыть новую вкладку, у вас не останется выбора. Речь в моем посте, и исследованиях британских ученых, если хотите, именно об этом.

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


        1. Dolios
          04.05.2016 22:24

          Ну как же не противоречит, когда я на все ваши аргументы привел контраргументы?

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

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

          В конце концов вам никто не мешает скопировать адрес ссылки и вставить ее в адресную строку того же окна. Или кликнуть на ссылку и нажать на крестик.


          1. Zenitchik
            05.05.2016 16:50

            Когда-то был MyIE там была такая настройка.


  1. Helldar
    04.05.2016 03:45

    У меня Google Chrome 50 последней версии — линки в статье не срабатывают.
    Хотя апдейтов браузера не было крайние 2 дня.


    1. Kesantielu
      04.05.2016 12:51

      Chrome 52 — работает.


      1. Helldar
        04.05.2016 13:28
        +1

        52? Тестовая, что ли?

        Версия 50.0.2661.94 m
        Вы используете самую новую версию Chrome.


        1. Helldar
          05.05.2016 02:53

          Зачем минусовать-то?
          У меня и сейчас показывает свежую стабильную версию как 50.0.2661.94 m

          Вот пруф
          image


          1. khim
            05.05.2016 09:38
            -4

            Не «зачем», а «почему». Потому что тут не «кружок кройки и шитья», а Хабр. Место, где людей, не знающих о том, как разрабатываются и выпускаются браузеры, в общем-то, быть не должно.

            Одно дело — увидеть подобные «перлы» от бухгалтера, другое — от web-разработчика.


            1. Helldar
              05.05.2016 09:43

              В курсе как они разрабатываются и выпускаются. Так как крайний стабильный релиз именно 50 версии, вот и уточнил не пользуется ли сей камрад «ночной» сборкой aka тестовой. Всего лишь.


    1. JmAbuDabi
      04.05.2016 22:31

      Работает ссылка для Хабра.


      1. Helldar
        05.05.2016 02:49

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


  1. winox
    04.05.2016 08:43
    +1

    Сколько лет работаю в веб-деве, но в шоке от этой статьи


    1. Helldar
      04.05.2016 08:48
      +1

      Статья-то ладно, а вот дырки в технологии…


  1. mamontovdmitriy
    04.05.2016 10:23

    Только что обновил оперу, все еще работает(


    1. cybernomix
      04.05.2016 14:18
      +1

      Я думаю это поведение останется таким и в будущем, ради обратной совместимости, т.к. _blank, является дочерним фреймом (если формально).
      А вот rel=«noopener» должен выключать такое поведение. Т.е. у разработчика есть выбор какое поведение ему нужно.

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

      P.S.: Может можно на серверной стороне поотключать средствами заголовков, типа Server-Side Access Control через HTTP_ORIGIN?


      1. cybernomix
        04.05.2016 18:44
        +1

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

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


        1. Zenitchik
          04.05.2016 19:20

          А js-ом это как раз полечить можно вдоль и поперёк.

          Какое конкретно решение Вы предлагаете?


          1. mwizard
            04.05.2016 19:27

            1. пройтись по всем <a> и добавить им noopener в ref.
            2. переопределить window.open и стирать window.opener у всех новооткрываемых окон.


            1. Zenitchik
              04.05.2016 20:36

              Логично. Про перекрытие мне в голову не пришло.


              1. cybernomix
                04.05.2016 21:38

                Да, только в обоих случаях выше HTTP_REFERER — тоже потеряется, увы (сам удивляюсь зачем это в жесткой связке стоит)


  1. jQuery
    04.05.2016 10:23
    +7

    Интересно, почему window.opener не ограничен только для текущего домена?


    1. winox
      04.05.2016 11:16
      +6

      И главное почему об этом никто не знал?


    1. Zenitchik
      04.05.2016 15:18

      Строго говоря, потому что в этом нет ничего плохого. К контенту страницы кроссдоменного доступа нет. И даже не ко всем свойствам окна он имеется.


      1. jQuery
        04.05.2016 15:58

        Как видите и тех что доступны оказалось достаточно.


  1. kreon
    04.05.2016 11:34

    В Safari 9.1 не работает.


  1. RuSV
    04.05.2016 12:51

    FF 45.0.2


  1. silvansky
    04.05.2016 13:02

    Так вот, как это делается!


  1. iit
    04.05.2016 14:10

    На сайте компании где работаю от target="_blank" мы отказались вообще, у нас есть url через который происходят редиректы на все сторонние ресурсы.


    1. cybernomix
      04.05.2016 21:42

      но на этот-то то урл вы с target="_blank" конечно ходите, а поделитесь как делаете редирект чтобы максимально гарантировано сохранить рефера


      1. iit
        06.05.2016 07:26

        1) На свой урл да
        2) Все ссылки имеют свой хэш и по этому хэшу происходит редирект, ссылками управляют контентщики они головой отвечают что все ссылки валидны. У нас агрегатор, то каждая ссылка очень жирно проплачена и договор не нее есть, так что на этом не заворачиваемся.


  1. tendium
    04.05.2016 14:45
    +1

    Я это репортил в FB года два назад. Они мне сказали, что это known issue, но по тону было похоже на «нам пофиг».


  1. cyberpunkyc
    04.05.2016 15:24

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


  1. bestxp
    04.05.2016 16:57

    У меня не срабатывал на клик колесиком, но зато при клике ЛКМ срабатывал


  1. cybernomix
    04.05.2016 17:09
    +1

    Таким грешат многие сайты, а некоторые, даже не считают это за проблему «на своей стороне»
    Воу воу воу, то что там «с формой бобра» по ссылке — это совсем из другой оперы, да и повеселее будет — это подмена url'a в адресной строке на «чтохочу.com» и она работает в Chrome.
    Вот это день «интересных историй»… я думал такие забавы остались где-то в середине 00-ых… печаль.


    1. EviGL
      04.05.2016 22:09
      +1

      Если почитать, это не подмена урла, это комбинация работы с опенером (таба открытая с недоверенного ресурса всё ещё контролируется этим ресурсом) и хитрости с подменой легитимной страницы на очень быстро грузящуюся data:html страницу (так, чтобы перезагрузка была не видна пользователю).


  1. nonby
    05.05.2016 01:23
    +2

    Спасибо, никогда не задумывался об этом.


  1. eshimischi
    05.05.2016 11:36

    Господа, все таки предлагаю сделать вывод под всем выше сказанным и статьей и провести черту. Каким образом поступить с target="_blank"? При условии, что это работает там, это не работает там, костыль из javascript. Спасибо.


  1. 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 есть -->


  1. 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.


    На более свежих версиях ещё не проверял, — может быть, эту защиту сломали.


    1. khim
      08.05.2016 13:13

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


      1. nickolaym
        08.05.2016 15:55

        А и впрямь! Конечно, я попытался проверить в песочнице.
        Окей, поставлю коллег в известность, что существует не только дырка в безопасности, но ещё и баг. Может, доберутся и пофиксят.


  1. iNickname
    13.05.2016 18:23
    -1

    Вот это ЛОЛ! А хотите прикол? В Китае ВСЕ сайты открывают ВСЕ линки в новой вкладке. Учитывая поголовную компьютерную неграмотность пользователя, подозреваю что можно кучу всего наловить у них!

    М, да-а-а, *facepalm*.