Autor Zpráva
quatzael
Profil
Lze nějak rozpoznat (a následně zabezpečit) přístup ke scriptu, na který přišel request pomocí AJAXU standardně přímo ze stránky oproti nějakému "nabourání" z venku?
User
Profil *
if (strtolower(filter_input(INPUT_SERVER, 'HTTP_X_REQUESTED_WITH')) === 'xmlhttprequest') {
   // I'm AJAX!
}
Chamurappi
Profil
Reaguji na quatzaela:
Jaké nabourání si představuješ? Cokoliv, co může stáhnout uživatelův prohlížeč, může stáhnout kdokoliv jakkoliv automatizovaně.


Reaguji na Usera:
Tímhle zabrání nanejvýš přímému odkázání na tu adresu. Není ani jisté, že jeho AJAX hlavičku X-Requested-With posílá.
Pokud explicitně nepovolí cizím doménám přístup, tak jeho data AJAXem nikdo nestáhne. A pokud to dovolí, tak cizí AJAX si tu hlavičku nastaví klidně také…
quatzael
Profil
User:
Díky moc!
juriad
Profil
User:
To není vůbec žádná záruka. Útočník si prostě přidá jednu hlavičku navíc a ani po ní nemusí pátrat, protože mu sám prohlížeč o ní řekne ve vývojářských nástrojích a dokonce mu umožní si i zkopírovat cURL příkaz.

quatzael:
A není to jedno? Při každém requestu stejně kontroluješ, zda uživatel má přístup k požadovaným datům nebo ne. Jakým způsobem se k nim dostane je vcelku irelevantní.
quatzael
Profil
Chamurappi:
No jestli lze nějak rozpoznat, že uživatel nepřistupuje standardně přímo ze stránky (domény) pomocí AJAXu, ale že se tam posílá data odněkud jinud(z cizího serveru apod.)


juriad:
Napadlo mě, že když třeba při přístupu na klasickou stránku server nastaví nějaký SESSION a pokud to SESSION nebude existovat při přístupu pomocí AJAXu, tak pozná, že je to přístup odněkud jinud, ne? Tohle asi nejde nijak obejít nebo jo?
Keeehi
Profil
quatzael:
Obejít jde všechno. Script se nejdříve zeptá na tu klasickou stránku, získá session a pak pošle požadavek na ten AJAX.

Když se to tak vezme, prohlížeč nedělá nic jiného, než že posílá určitou sekvenci požadavků. Jaké požadavky se dá velmi lehce zajistit a pak už stačí odesílat ty stejné. A když jsou tedy stejné, nedokážeš je od sebe rozlišit. Jediná obrana před automatizací je CAPTCHA. Pokud ti jde jen o nějaké vytěžování dat, můžeš nastavit třeba nějaký limit na počet požadavků za určitou dobu. Tak, aby na něj lidský uživatel nenarazil ale aby limitoval automatické stahování ve velkém.
quatzael
Profil
Chamurappi, juriad, Keeehi:
Ok, díky za odpovědi.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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