Securitate target="_blank"

Deschide acest link ca să vezi despre ce vorbesc.

Apoi articolul de la care am pornit: https://medium.com/@jitbit/target-blank-the-most-underestimated-vulnerability-ever-96e328301f4c#.ajo4pddw7

Eu, trebuie să recunosc, n-am știut până în acest moment că acesta este comportamentul default.
Nu pot să găsesc o explicație de ce ai face acest comportament default și nu invers.

Mai rău este că, spre exemplu, dacă eu deschid o pagină cu target="_blank" de pe devforum, și apoi pe pagina deschisă eu navighez pe orice site, acel site are acces la window.opener.location. Mi se pare extrem de stupid!

3 Likes

Faci “phishing” via https. Măcar atât :slight_smile:

2 Likes

Things like window.opener.document are subject to CORS though.

https://mathiasbynens.github.io/rel-noopener

Deci nu merge sa accesezi documentul. Dar da, face ca phishing-ul sa aiba succes poate ceva mai mare, dar daca te gandesti, cei care cad in plasa sunt aceeasi care ar pica si fara windows.opener.location

Cel mai “periculos” e window.opener.location.assign()

Regula de baza e cand esti intrebat de user/password, trebuie sa te uiti la URL-ul din addressbar.

1 Like

Foarte adevărat, nu poți să accesezi absolut nimic din pagina respectivă, nici măcar URL-ul (deși poți să vezi document.referrer ca să-ți dai seama de unde au venit utilizatorii).

Întrebarea mea este: ce beneficii aduce acest lucru încât să-l lași ca și comportament default? Asta mă deranjează pe mine.

Nu cred că am văzut nicăieri un atac mai “nedetectabil” decât acesta. Poți să fii foarte creativ, astfel încât nici măcar să nu apară iconița de loading.

Poate îmi scapă mie ceva, dar nu mi se pare un argument bun să spui că cei care cad în plasă sunt aceeași care ar pica și fără windows.opener.location când clar îl face MULT mai nedetectabil decât alte metode și fără un alt beneficiu… practic este un cadou din partea browserelor pentru cei care fac phishing pe ideea că… dacă oricum sunt mulți care cad în plasă, de ce să nu fie mai mulți?

Și nu e vorba doar de phishing, e vorba de flowul tău ca user normal. Să zicem că accesez un link de pe Facebook (nu au făcut nimic în acest sens) și intru pe alt site, când mă întorc pe tabul cu Facebook, mă aștept să fie același lucru, nu mă aștept să fie ceva pagina de porn sau reclame.

Îmi înscriu o reclama pe Facebook Ads la siteul X pe care pun un window.opener.location către siteul Y. Reclamă la două siteuri la preț de unu.

Și revin din nou cu întrebarea, DE CE? De ce să lași default așa ceva, de ce nu este invers? Să pui un atribut în plus când vrei să se comporte așa?

2 Likes

Don’t use target=_blank (or any other target that opens a new navigation context), especially for links in user-generated content, unless you have a good reason to.

Si comentariile sunt interesante.

1 Like

Pai faci asta pana cineva se va plange. Banuiesc ca la dimensiunea sa, Facebook va lua masuri. Vei mai putea sa mai faci reclama vreodata pe Facebook?

Da, un articol bun, dar chiar dacă nu folosești target="_blank", doar în cazuri rare, tot nu văd plusul pe care-l aduce comportamentul actual.

Și oricum, este folosit în foarte multe cazuri, pe Facebook peste tot, și chiar aici :slight_smile:

Ce măsuri? Să interzică reclama? Sunt de acord.

Schimbăm scenariul, pun reclamă la siteul X, userul întra pe site apoi navighează pe siteul Y (care nu face parte din Facebook Ads) și din siteul Y eu folosesc window.opener.location. Ce mai face Facebook în acest moment?

Și din nou, toate astea pentru nici un plus.

1 Like

Din păcate trebuie să plec și nu am apucat să studiez problema foarte bine. Poate chiar există un motiv pentru acest comportament dar nu-l văd eu momentan.

Mi se pare stupid să lași așa ceva ca default, și mi se pare stupid ca Facebook să nu facă nimic în acest sens pentru linkurile puse de useri / reclame. Nu aduce nici un plus, doar riscuri de securitate GRATIS.

Înțeleg că există cazuri când este util, dar nu cred că atunci când userul pune linkurile respective.

Hmm, deci tu spui ca daca user-ul navigheaza de pe Facebook pe X cu _target=blank, apoi user-ul navigheaza (tot cu target=_blank?) de pe X pe Y, si in Y chemi window.opener.location vei putea modifica tab-ul cu Facebook?
Nu cred, ai 2 navigari, cand checmi pe Y window.opener.location va fi pentru tab-ul X.

Nu, nu așa spun eu, ci mai rău.

Userul deschide pe Facebook siteul X, apoi pe tabul respectiv oriunde navigheaza, pe orice site, fie că dă click, fie că scrie el URLul, fie că dă click pe bookmark, pe orice site întră, are setat window.opener ca fiind tabul cu facebook, și poate să schimbe locația.

Deci, o dată ce un tab a fost deschis cu target="_blank", acel tab o să aibă pe toată durata lui window.opener setat (dacă nu îl setează null de la început, sau vreun site pe parcurs) și astfel orice site pe care intri din acel tab poate să-ți schimbe “location”. Fain, nu? Logic, nu?

2 Likes

Sunt curios în cât timp se prind “programatorii” de siteuri la kilogram (manele download și alte chestii, știți și voi genul ăsta de siteuri) de treaba asta să redirecționeze toate taburile în toate direcțiile. Nu te oprește nimeni să-ți pui un if, dacă ai acces la tab, să faci redirect (nu scriu codul că cine știe câte copy pasteuri și apare peste tot apoi :smiley: ).

1 Like

Aceasta metoda de phishing e destul de cunoscuta pentru cei care activeaza in domeniul securitatii si se numeste Tab Napping, ea fiind descoperita acum 5-6 ani. Si da, functioneaza pe Facebook, Google, Yahoo etc. Un articol destul de interesant pe tema asta gasiti aici.

4 Likes

nu-l poti modifica daca e same domain. in poti doar redirecta
folosesc si eu chestia asta pentru http://onboardx.com pentru promovare dar doar daca se trimite referer-ul pentru ca omul sa poata reveni unde era :slight_smile:

1 Like

Sunt curios dacă problema se rezolvă printr-un redirect. Adică ce se întâmplă dacă toate link-urile externe le trec prin devforum.ro?redirect=http://encoded%20url și deschid acest proxy într-un tab nou?

Am observat că facebook deschide în acest fel toate url-urile, poate ăsta e motivul?

Poate folosesti _parent sa incarci tot felul de site-uri… astfel, ca ad network, poti incarca 6 site-uri timp de 3 secunde, iei banii de la 6 fraieri si ii platesti unui singur fraier. (Mai in gluma, mai in serios, aparent asa se fac afacerile, in ziua de azi…)
Disclaimer: Adresarea din paragraful anterior este un pamflet si trebuie tratata ca atare.

Lasand gluma la o parte, poate fi de folos si la black hat seo.

Sunt curios, insa, daca merge in mai multi pasi. Gen, de pe X, intru pe Y, de unde intru pe Z, apoi pe K. Va putea K sa acceseze X? De ce?

Edit: Scuze de dublu post, am uitat ca doar ce-am postat… (lipsa de atentie)

Deci cum faci concret?

Daca dau click pe Facebook la un link catre alt site, in tab-ul care se deschide pot seta window.opener.location, deci nu vad ca Facebook sa faca ceva.
Singurele solutii ca sa faci ca window.opener.location sa nu mearga sunt in articolul din link-ul ala.

Cred ca ar mai merge si asa ceva: X deschide Y, Y deschide Z, Y se inchide. Insa nu am testat. Nici nu stiu daca pot fi stacate.

Subiect readus in discutie aici :

Instagram a remediat problema, acum sa vedem daca si restul “gigantilor” o vor face :slight_smile: