Autor Zpráva
joe
Profil
Z prohlížeče Maxthon (WebKit) mi nejdou psát příspěvky, po stisku tlačítka pro odeslání se objeví v konzoli Refused to set unsafe header "Referer"

Diskuse na toto téma
Str4wberry
Profil
Hm, co s tím.

Skutečné řešení by bylo používat proti CSRF token místo kontroly refereru.

Pokud se to týká jen marginálního prohlížeče, tak by se v něm formulář nemusel odesílat AJAXem.
Chamurappi
Profil
Reaguji na Str4wberryho:
Hm, co s tím.
Sledovat nějakou druhou HTTP hlavičku jako alternativu k Refererovi. JavaScriptem můžu posílat jakoukoliv a požadavky vyvolané z cizích stránek ji nemají šanci napodobit, stejně jako nemůžou podvrhnout Referera.

Nebavili jsme se o tom už někdy? Mám tušení, že jsem tohle už někdy chtěl navrhnout jako ultimátní řešení problému s vypnutým Refererem (ale asi jsem to nikam nenapsal). Vesměs všechny POSTy tu už dělá JS. Takže kdo má zapnutý JS, nemusel by mít zapnutého Referera.
joe
Profil
K čemu tam ta hlavička vůbec je?


Tento příspěvek jsem poslal z aktualizovaného prohlížeče Maxthon :-) Takže už to jde.
Str4wberry
Profil
Je tam, jak píšu, jako ochrana proti CSRF.
joe
Profil
Str4wberry:
Já četl, co jsi psal, ale nějak tam tu ochranu nevidím. Nebyl by prosím nějaký článek na vysvětlení problematiky?

Předpokládám, že to funguje tak, že v JavaScriptu se nastaví referer na aktuální stránku, odkud se příspěvek posílá a v PHP se zkontroluje, zda referer odpovídá.
Co ale mně, případnému útočníkovi, brání podvrhnout referer v PHP a pak posílat v XHR jako referer podvrhnutou adresu, pak se tam zřejmě kontroluje doména... ale ptám se, protože jsem nikde žádné takové řešení neviděl, takže se rád podívám, jaýkým způsobem se to dá řešit takto.
Chamurappi
Profil
Reaguji na joa:
v JavaScriptu se nastaví referer na aktuální stránku, odkud se příspěvek posílá a v PHP se zkontroluje, zda referer odpovídá
On především referera nastavuje prohlížeč při normálním odesílání. To, že se do toho montuje JavaScript a snaží se nasimulovat stejné chování při posílání AJAXem, je v tuto chvíli vedlejší.

brání podvrhnout referer v PHP a pak posílat v XHR jako referer podvrhnutou adresu
Do referera vyplňuje skript adresu stávající stránky, ne adresu referera stávající stránky. XHR z jiné domény nepošleš kvůli bezpečnostní bariéře v prohlížečích.

Cílem tohoto opatření je, abys nemohl vysílat požadavky jménem někoho jiného. Třeba bys vložil do diskuse odkaz na svoji zlotřilou stránku, v níž by byl skriptem automaticky odesílaný formulář zpátky do DJPW s pokynem „smaž vlákno XYZ“ — já bych tu tvoji stránku navštívil a v ten moment by DJPW vlastně dostala pokyn ode mě, tedy lépe řečeno HTTP požadavek s mojí všemocnou moderátorskou sušenkou… takže by ho bez námitek vykonala. Kdyby nezkontrolovala referera. Standardními prostředky nemůžeš referera podvrhnout u netušící oběti.
joe
Profil
Chamurappi:
Díky za vysvětlení, vím co je CSRF, ale pořád mi to není moc jasné :-) každopádně dál bych to nerozebíral.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: