Здравствуйте, гость ( Вход | Регистрация )




 
Ответить в эту темуОткрыть новую тему
> "Подводные камни" target="_blank"
aprika
сообщение 10.5.2016, 20:30
Сообщение #1


Админша
*******

Группа: Администратор
Сообщений: 14 153
Регистрация: 20.9.2006
Пользователь №: 1
Спасибо сказали: 321 раз(а)
Фуу сказали: 7 раз(а)




Репутация:   21  


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

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

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

На странице 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». Вместо него можно использовать rel=noreferrer.

Богдан Рыхаль, Хабрахабр


--------------------
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Цитировать в форуму быстрого ответаОтветить с цитированием данного сообщения
Поделиться с друзьями в соцсетях



Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


 
Текстовая версия Сейчас: 15.12.2019, 3:27