wordpress-zashtita-otvariane-linkove

WordPress защита при отваряне на връзките

Обновлението до WordPress 4.7.4 добави доста поправки към съществуващи проблеми. Но добави и един нов страничен ефект, за който ще поговорим сега. А именно линковете, които могат да повредят съдържанието на страницата. Сега ще ви покажем как и защо се случва това.

В началото хората използваха браузърите по напълно нормален начин с използването на нови прозорци, тогава нямаше интерфейс с табове. Всичко се отваряше по подразбиране в същия прозорец или таб. Интерфейсът с табовете стана предпочитан след излизането на Opera и Firefox. След това HTML дефинира метод за отваряне на линк в нов прозорец или таб. Това се прави много лесно като се направи връзката ето така:

<а target=“_blank” href=“nov_link.html”>текст на линка</а>

Ако искате връзката да се отваря в текущия прозорец или таб се прави ето това:

<а href=“nov_link.html”>текст на линка</а>

Под WordPress всичко става дори още по-лесно с натискането на един бутон в редактора:

който добавя автоматично отварянето на връзката в нов прозорец или таб.

Всичко това работеше чудесно до преди няколко години, когато се откри сериозен проблем, който всички са пропуснали. А именно възможността на отваряния линк да промени съдържанието на отварящия прозорец.

Защо се получава това?

Отваряната връзка в нов прозорец или таб получава като параметър window.opener цялото съдържание на отварящия прозорец или таб. Това позволява на новия документ да види от къде е извикан и да направи няколко прости промени в извикващия прозорец. Разбира се, нещата далеч не са розови в интернет и редом с простите промени са напълно възможни някои не чак толкова прости. Може да се промени изцяло съдържанието на отварящия прозорец, може да се променят връзките в него, може да се прочетат бисквитките, може да се вземе някакво съдържание от него (например паролите, потребителските имена и т.н.). Накратко, съществува възможност да се направят много на брой и все опасни неща. А както често се случва, ако нещо може да се направи опасно, то все някой го прави.

Примери:
https://mathiasbynens.github.io/rel-noopener/
https://jamiefarrelly.github.io/Rel-NoOpener-Example/

Както виждате, отварянето на нови екрани далеч не е безопасно за отварящия прозорец. Разбира се горните примери са напълно безопасни и безобидни, така че тествайте смело.

Как може да бъде спряно това?

Преди няколко месеца се направиха и промени по браузърите с цел запушване на дупката. Бяха добавени 2 нови параметъра rel=“noopener” и rel=“noreferrer”, които вършат две напълно различни неща, но общата им цел е да оправят този проблем. Първият параметър noopener работи предимно на Chrome, Opera и Safari, които при използването му нулират (изчистват) window.opener към новия прозорец. Така новият прозорец няма да може да достъпва никакви данни от стария прозорец. Ако не използвате параметъра, новият прозорец ще може да достъпва данните на стария прозорец.

Под Firefox обаче, този механизъм не работи и трябва да се използва втория параметър noreferrer за тази цел. Все пак, Firefox 52 добави и възможността за noopener.

За да се направи 100% сигурен кода под всички браузъри е много по-добре ако се използват и двата параметъра за пълна защита. Така примера в началото става ето така:


<а target=“_blank” rel=“noopener noreferrer” href=“nov_link.html”>текст на линка</а>

Важно! WordPress ще добави във всички линкове съдържащи target=“_blank“ горепосочените rel=“noopener noreferrer” независимо дали са външни връзки (към други сайтове) или вътрешни връзки (към същия сайт).

Трябва ли да се страхувате?

Най-простият отговор е – зависи. Ако вие лично си правите линковете към други ваши сайтове и имате пълен контрол над тях – не. Ако правите линкове към сайтове с репутация (Google/Twitter/Facebook и други) – навярно не. Но ако имате потребителско генерирано съдържание – да, добре е да се вземат мерки. А потребителско съдържание може да е дори и един коментар в сайта ви.

Ето защо и в WordPress 4.7.4 вече към връзките, отваряни в нов прозорец/таб, автоматично се подава и параметъра rel=“noopener noreferrer”. Това работи добре, но има един страничен ефект за маркетолозите. Връзка отваряна по този начин се визуализира като “директна” вместо като “от друг източник” в инструментите за анализ на сайтовете тип Аналитикс и подобни. Дори използването на лог файловете на уеб сървъра няма да помогне, защото параметъра referrer просто липсва, тъй като браузъра не го прибавя към заявката.

Поправка

Ако все пак старият вариант много ви липсва, има лесно решение с ето този модул:
https://wordpress.org/plugins/no-noopener-noreferrer-dont-add-relnoopener-noreferrer/

Но трябва много добре да знаете какво и как отваряте от вашия сайт към други сайтове.

WordPress 4.8

Новият WordPress 4.8 ще бъде издаден скоро – по-малко от 4 седмици, и този код е включен в него. Това ще е текущо начина за отваряне на нови прозорци/табове. Ако това не ви харесва винаги можете да използвате модул като показания по-горе за да промените функционалността на отварянето на нови връзки.

Въпреки безспорният плюс от правенето на интернет по-сигурен, това ще има дългосрочни последици за интернет маркетърите и уебмайсторите. Оттук насетне те ще получават трафик от други сайтове буквално на сляпо без да могат да видят от къде точно идват потребителите. Въпреки че тук го описваме специфично за WordPress, очаквайте и останалите CMS системи като Joomla, Drupal и другите да използват този механизъм в бъдеще.

Едно мнение за “WordPress защита при отваряне на връзките

  1. Статията е добра, но според мен в нея липсва нещо много основно на което определено трябва да се обърне внимание. rel=“noopener“ и rel=“noreferrer“ са превантивен Security механизъм свързан с blankshield и reverse tabnabbing атаки. Употребата на тези атрибути засяга не само анализа на трафика идващ от сайтове използващи ги, а касае пряко и повечето affliate-ри понеже е възможно продажбите през такъв линк да не бъдат track-нати и съответно да не бъде изплатена комисионна. Това буквално може да срине цели бизнесмодели разчитащи главно на affliate линкове за монетаризация на трафика си. Аз лично бих дал препоръка на affliate-рите с noopener и noreferrer атрибути да наблюдават под лупа дали линковете биват засечени от рекламните кампании и дали комисионните биват отчетени коректно.

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *