Hraju si s testovací aplikací, která přijímá požadavky JSON a odpověď je také JSON. Snažím se provést CSRF pro transakci, která přijímá pouze data JSON s požadavkem POST metoda v žádosti.) Aplikace vyvolá chybu, pokud je URL vyžádána pomocí metody get (např. V <script src=
).
Aby byl útok smysluplný, tzn. Aby transakce procházela, musím data v žádosti odeslat. Pokud vytvořím svou vlastní stránku a odešlu žádosti JSON, soubory cookie nebudou cestovat, a proto server vrací neověřenou chybovou zprávu.
V původním požadavku serveru nejsou žádné náhodné tokeny.
Zajímalo by mě, jestli existuje způsob, jak v tomto scénáři provést úspěšný útok CSRF.
Musíte alespoň zkontrolovat, zda Content-Type: application/json
na žádost.
Není možné získat POSTed <form>
k odeslání žádosti s Content-Type: application/json
. Můžete však odeslat formulář s platnou strukturou JSON v těle jako enctype="text/plain"
.
Není možné provést křížový původ ( CORS ) XMLHttpRequest POST s Content-Type: application/json
proti serveru, který si není vědom křížového původu, protože to způsobí, že žádost HTTP OPTIONS o „předlet“ bude nejprve schválena. Ale můžete poslat křížový původ XMLHttpRequest POST withCredentials , pokud je text/plain
.
Takže i s application/json
kontrola, můžete se dostat docela blízko k XSRF, ne-li úplně tam. A chování, na která se spoléháte, aby byla zajištěna, jsou poněkud nejasná a stále ve fázi Pracovní verze; nejedná se o pevné a rychlé záruky pro budoucnost webu.
Mohlo by dojít k poškození, například kdyby byl do budoucích verzí HTML přidán nový JSON enctype
. (WHATWG přidal text/plain
enctype do HTML5 a původně se pokusil také přidat text/xml
, takže není vyloučeno, že by k tomu mohlo dojít.) Zvyšujete riziko kompromisu z menších, jemnějších chyb prohlížeče a pluginů při implementaci CORS.
Takže i když se vám pravděpodobně pravděpodobně podaří prozatím prozradit, rozhodně bych nedoporučoval postupovat vpřed bez řádného systému tokenů anti-XSRF.
To je využitelné pomocí Flash, podle https://code.google.com/p/browsersec/wiki/Part2#Same-Origin_policy_for_Flash
Schopnost vytvářet soubory cookie s více doménami HTTP GET a POST) požadavky prostřednictvím zásobníku prohlížeče, s menšími omezeními, než je obvyklé u jiných prohlížečů. To se dosahuje pomocí rozhraní API API URLRequest. zejména zahrnuje možnost specifikovat libovolné hodnoty typu obsahu a odesílat binární užitečná zatížení.
Netestoval jsem to sám, ale zní to věrohodně.
Aktualizace: Vypadá to, že nejnovější vydání Flash již ve výchozím stavu nepovolují žádné požadavky napříč doménami, což je činí nevyužitelným.
Aktualizace č. 2: při zpracování 307 přesměrování přes flash však existuje dlouhodobá zranitelnost, což znamená, že je to stále využitelné