Небезпечний target="_blank"

Більшість створюють зовнішні посилання через target="_blank" і не знають одного цікавого нюансу — сторінка, на яку ми потрапимо таким чином, отримає частковий контроль над посилається на неї сторінкою через js властивість window.opener.
Через window.opener.location ми зможемо зробити редирект на, приміром, фішингову сторінку. Це свого роду tabnabbing, тільки більш просунутий. Так як жертва найменше очікує підміни сторінки, відкритої раніше, довіреної вкладці браузера.

Проблема далеко не нова, але досі актуальна, і як бачу, не всі про неї знають.

Проблема так само існує у facebook. Для швидкого тестування можна розмістити пост (приватного) з посиланням на http://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 плагін який, за описом, вирішує поставлену задачу (особисто не тестував).

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.