Jak blokovat XMLHttpRequest na cizí servery

huff

Jak blokovat XMLHttpRequest na cizí servery
« kdy: 13. 12. 2017, 21:11:26 »
Jak je možné, že ze sptrámek usetreno.cz (neklikat, je tam spousta dalších krimiálních skriptů) chodí XMLHttprequesty na ipinfo.io (bonzuje to nějak ip)? ,což je cizí doména? Je nějak možné nějakým pravidlem blokovat xmlhttprequesty na cizí servery?
« Poslední změna: 14. 12. 2017, 10:10:52 od Petr Krčmář »


Mazak

Re:Jak blokovat XMLHttpRequest na cizí servery
« Odpověď #1 kdy: 14. 12. 2017, 10:46:41 »
Standardne maji browsery nastaveno pro ajax neco jako "same origin policy" je mozne ze jsi to vypnul. Ale existuje proxy trik kde smejd stranka muze mit na svem serveru vlastni proxy a servovat scripty tretich stran pres svou domenu coz je pro browser temer nezjistitelne.

j

Re:Jak blokovat XMLHttpRequest na cizí servery
« Odpověď #2 kdy: 14. 12. 2017, 10:55:01 »
Vypni si js ... easy.

Re:Jak blokovat XMLHttpRequest na cizí servery
« Odpověď #3 kdy: 14. 12. 2017, 11:17:08 »
Vypni si js ... easy.

Teda, Vy co rada, to perla.

Doplnil bych, že mezi vhodná řešení patří ještě nechodit na tu stránku, neotvírat prohlížeč, nespouštět počítač, nemít internet a pro jistotu ani elektřinu.

none_

Re:Jak blokovat XMLHttpRequest na cizí servery
« Odpověď #4 kdy: 14. 12. 2017, 11:21:32 »
XMLHttpRequest muzes poslat kamkoliv. Jestli ti ten server odpovi je jina otazka. Prohlizec tohle nijak neovlivnuje. Jinak by totiz nefungovaly vsechny Google Analytics a podobny. Mozna existuje nejakej plugin, co to umi omezit, ale nijak si nepomuzes. V podstate odstranis ty, kteri vetsinou nedelaj nic nekaleho a nechas ty, co to schovavaji (napr. pres proxy na svym serveru) a jsou skodlivejsi. Jedina moznost jak zabranit XMLHttpRequest je zakazat JS. Jen se priprav na spoustu nefunkcnich webu.


HackITo

Re:Jak blokovat XMLHttpRequest na cizí servery
« Odpověď #5 kdy: 14. 12. 2017, 12:21:31 »
Pokud je to na tom serveru povoleno, tak si stránka může posílat co chce kam chce. Stačí aby server vracel v headeru Access-Control-Allow-Origin: * a je to.

Ale i pokud to tak není, tak stále jde používat JSONP...

DK

Re:Jak blokovat XMLHttpRequest na cizí servery
« Odpověď #6 kdy: 14. 12. 2017, 14:39:48 »
XMLHttpRequest muzes poslat kamkoliv. Jestli ti ten server odpovi je jina otazka. Prohlizec tohle nijak neovlivnuje. Jinak by totiz nefungovaly vsechny Google Analytics a podobny. Mozna existuje nejakej plugin, co to umi omezit, ale nijak si nepomuzes. V podstate odstranis ty, kteri vetsinou nedelaj nic nekaleho a nechas ty, co to schovavaji (napr. pres proxy na svym serveru) a jsou skodlivejsi. Jedina moznost jak zabranit XMLHttpRequest je zakazat JS. Jen se priprav na spoustu nefunkcnich webu.
Tohle neni pravda, pokud se XMLHttpRequest dela na jinou domenu nez aktualni, prohlizec to odmitne, protoze CORS. Koncovy server to muze ovlivnit nastavenim hlavicek

none_

Re:Jak blokovat XMLHttpRequest na cizí servery
« Odpověď #7 kdy: 14. 12. 2017, 16:58:27 »
No, uplne presne prohlizec posle nejdriv dotaz, kterym zjisti ty hlavicky. Pote pokracuje normalnim dotazem. Takze ad absurdum ten dotaz posle.

Btw to, jestli CORS zafunguje je ciste na prohlizeci. Pokud pouzijes klienta, kterej ty hlavicky ignoruje, tak se vysledek proste vrati. Dokonce si to muzes nastavit v prohlizeci: https://www.thepolyglotdeveloper.com/2014/08/bypass-cors-errors-testing-apis-locally/

huff

Re:Jak blokovat XMLHttpRequest na cizí servery
« Odpověď #8 kdy: 14. 12. 2017, 18:03:12 »
Zaujaly mě tady 3 odpovědi na 2 téma:
1. Mazak + none_ na téma přesměrování přes proxy, na tom si vyláme zuby dost lidí
sice se to technicky netýká dotazu (protože doslovně to jde na 1st party) to je dost svinstvo, protože to i obfuscuje URL. V html je inline script, který nastaví javascriptově cookie "adb" což způsobí, že sama se stává zdrojem žumpy a i v nejpřísnějším nastavení ublock/umatrix (cokoli 3rd blokovat) to způsobí rozpad designu webu a také že vizuálně projde pár reklam (js kódu mnohem víc).


Tudíž se musí vypnout inline scripty (implementace ublock pro některé browsery umí selektivně blokovat inline scripty s daným výrazem idnes.cz###script:contains(adb), bohužel toto pravidlo nejde aplikovat genericky(na všechny weby), prostě pravidlo musí být definované pro každý server), tudíž je bezstarostnější vypnout inline skripty pro daný server uplně.

Další možnost je zakázat cookies (opět bezstarostně vypnout cookies pro doménu kompletně je jednodušší než hledat doplněk, který umí filtrovat globálně cookie s jménem adb)

Problém toho je, že nevíte, na jaké stránce tenhle hnus běží a na které ne. Při prvním načtení je stránka NEINFIKOVANÁ (neboť neodeslala cookie adb), až po další navigaci na na vás vykydne hnuj. Problém je, že způsobí i určitý "leak informací" na šmelinářské weby ( dnes není riziko webu ztráta dat, ale krádež/únik dat).
Dá se určitým způsobem blokovat "cizí requesty", pokud náhodou stránka je v infekčním režimu, ovšem s ne velkou úspěšností, je na to potřeba  filtr requestů z regurních výrazů zjednoušeně jako /[A-Z-a-z_-/]{30,120}/ navíc to i sežere legitimní obsah

Snad jediná naděje je rozeznat infekční režim, že response mají http header X-nginx-proxy antiadblock-* (zhruba). Uměl by někdo naprogramovat userscript nebo spíš extension, který hnoje označené tímto headerem filtroval?

2. CORS dotaz (zjistil jsem že nejdřív pošle HTTP OPTIONS a až pak komunikuje) může leaknout taky nějaká data?

.

Re:Jak blokovat XMLHttpRequest na cizí servery
« Odpověď #9 kdy: 14. 12. 2017, 22:22:22 »
2. CORS dotaz (zjistil jsem že nejdřív pošle HTTP OPTIONS a až pak komunikuje) může leaknout taky nějaká data?
Hlavně cílový server ten požadavek neodmítne, takže klient pak může posílat, co se mu zlíbí.