Autor Zpráva
iiic
Profil
Pěkné poledne

Chtěl bych se poradit, jestli se dá nějak bránit proti tomu typu útoku, kdy se pomocí externího zdroje vkládaného do stránky vyvolá http autentizace a tak se sbírají hesla uživatelů?

Nahrát do stránky nějaký externí zdroj (třeba avatar uživatelského profilu) je možné téměř všude. A někde je možnost vkládat tento obrázek i jako externí zdroj, což sebou přináší docela riziko v tom, že u toho externího zdroje se může, třeba až po čase, objevit http status 401 a ideálně i nějaká hláška co nezkušené uživatele přesvědčí že tam mají zadat své jméno a heslo. Samozřejmě nejde o nic sofistikovaného, ale nezkušené uživatele to může nachytat a ty zkušené docela otravovat (není možné stránku používat pokud nedám přihlásit/zrušit). A než se o tom správce webu dozví a externí zdroj odstraní může už být napáchaná docela velká škoda.

Jasné a jednoduché řešení je nevkládat (a uživatelům neumožnit) do stránky vkládat žádné externí zdroje. Ovšem pokud bych přesto možnost vložit si obrázek (nebo cokoliv) do stránky z externího zdroje umožnit chtěl, dá se to nějak ošetřit?

Protože jednoduchý test na http status 401 neřeší atomicitu a to, že pro můj server (třeba podle IP) tam ta 401-ka nebude a pro všechny ostatní uživatele potom ano. Další problém je, že do stránky může být pomocí http hlavičky Link připojeny ještě další zdroje a ty bych musel testovat taky (a protože jich může být neomezeně, nepůjde to otestovat snadno).

Jestli na to není nějaký nový http status či nový html atribut, tak vážně netuším jak to řešit.
Chamurappi
Profil
Reaguji na iiice:
Napadají mě dvě možná opatření, která už dost možná napadla i tebe:
1) Povolit vkládání obrázků jen z důvěryhodných zdrojů (třeba imgur.com apod.), kde je podobná hrozba málo pravděpodobná.
2) Obrázky z nedůvěryhodných zdrojů automaticky kopírovat na důvěryhodné.

Jestli na to není nějaký nový http status či nový html atribut
Možná by mohl fungovat atribut crossorigin="anonymous" na obrázcích, podle MDN by měl bránit posílání basic autentizace, ale nezkoušel jsem, jak to doopravdy funguje (znám ho jen ve spojitosti s čtením pixelů přes <canvas>).
iiic
Profil
Chamurappi:

crossorigin="anonymous" bohužel ten dialog neskryje … teď jsem zkoušel.
Také jsem zkoušel počítat integrity, ale ten funguje jen u scriptů a stylů, u obrázků nereaguje ani na změnu http hlaviček ani na změnu obsahu souboru.
Zkoušel jsem i javascript a načíst si obrázek pomocí XMLHttpRequest() a až po otestování na 401 ho vykreslit, jinak nevykreslovat, jenže už samotné načtení obrázku pomocí XMLHttpRequest() vyhodí ten otravný dialog, takže tohle taky nic neřeší. Jedině Firefox má nějaký 'background request' kde se dá XMLHttpRequestem dotázat na hlavičky bez zobrazení toho okna, ale raději bych to měl vyřešené pro všechny prohlížeče a bez javascriptu.

Nad možností uložit si (automaticky) externí zdroje k sobě (nebo do nějakého důvěryhodného úložiště) jsem přemýšlel a asi to budu dělat právě takto. Ale za ideální řešení to taky nepovažuji, abych pak nebyl za 'vykradače' který si cokoliv stáhne k sobě namísto toho, aby na to odkázal. A zároveň se tím také připravuji o možnost využít různé CDN které by měli pro uživatele servírovat obsah rychleji a bez cookies, které třeba pro ty obrázky nejsou potřeba, ale prohlížeč jim je stejně odesílá.

Žádné řešení ze kterého bych byl nadšený jsem nenašel. Bojím se, že v současné době prostě nic dobrého neexistuje.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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