it-swarm-eu.dev

Jak mohu zabránit tomu, aby uživatel moci volal mé Ajax funkce?

Mám web, který využívá volání Ajax k provedení řady funkcí. Mají webový prohlížeč, který volá zpět do skriptu - ajax.php. Přestože používám post data k přenosu dat a omezuji příkazy, které může skript Ajax volat, není nic, co by uživatelům bránilo ve spoofingu ajax volání, aby se pokusili manipulovat s webem. Existuje nějaký všeobecný způsob, jak zabránit uživatelům v podvodném volání? Existuje způsob, jak zajistit, aby volání Ajax ve skutečnosti pocházelo z mého webu a ne z jiného skriptu nebo webu?

Nebo musím jednoduše zkontrolovat okrajové podmínky ve skriptu php a zabránit uživatelům v spoofingu věcí, které by neměli dovolit, ale nechat jim spoof tam, kde by to bylo dovoleno.

12
Daniel Bingham

Nemyslím si, že existuje nějaký způsob, jak to udělat spolehlivě, protože jakékoli informace, které můžete poslat, mohou být spoofed, v závislosti na tom, jak chytrý je uživatel.

Pokud chcete pouze jednoduchý blok lidí, kteří volají nikoli z vaší stránky, můžete zkontrolovat referrera, použít soubor cookie nebo přidat náhodné skryté pole odeslané volající stránkou, které vyprší po určité době. Jsou-li však uživatelé skutečně odhodlaní, mohou se snadno spoofovat.

12
delete

Stručně řečeno, ne. Jakýkoli požadavek na adresu URL prostřednictvím GET nebo POST může podat kdokoli, kdo používá jakýkoli software. Ve skutečnosti se požadavek AJAX opravdu neliší od přímého načtení URL, s výjimkou toho, že se vrácená data zobrazují v prohlížeči jako webová stránka.

To je přesně důvod, proč byste měli vždy ověřovat odeslaná data na serveru, ať už provádíte validaci Javascriptu či nikoli.

Není jasné, co přesně dělá skript na straně serveru a co by se mohlo pokazit, ale pokud jsou uživatelé schopni „manipulovat s webem“ tak, že skript s chybnými údaji zavolají, pak to děláte špatně.

Pravděpodobně nejlepším řešením bude zavedení nějaké formy autentizace.

6
DisgruntledGoat

Takže v podstatě chcete omezit ajax.php tak, aby odpovídal pouze na požadavky AJAX?

Nejsem odborník na php, ale zdá se, že je možné zjistit, zda daný požadavek přichází z AJAX nebo z "běžného" požadavku prohlížeče kontrolou hodnoty $_SERVER['HTTP_X_REQUESTED_WITH'].

Zdroj

3
theycallmemorty

Jak zdůraznil někdo jiný ... volání Ajax jsou pouze příjemci $ _GET nebo $ _POST, takže mým přístupem bylo vždy s nimi zacházet jako s jakoukoli akční stránkou a filtrovat/dezinfikovat vstup. Pokud máte například malou variantu toho, co očekáváte například za měsíc, a víte, že je to vždy ve formátu „Jan, únor, březen ...“, můžete nastavit pole očekávaných hodnot a filtrovat proti němu. Pasti všeho, co se neshoduje a volitelně něco hodte zpět jako „Bzzt ... díky za hraní ...“

Nedokážu vymyslet příklad, kdy by můj skript Ajax musel být bezpečnější než odeslání formuláře.

HTH

1
digit1001

Myslím, že hlavní část vašeho řešení bude omezení rychlosti přenos z konkrétního uživatele otisk prstu. Možná hash IP adresy, řetězce User Agent a odesílaných dat.

Pomáhá také vazba na stránku, která volá ajax na vrácená data ajaxu. Na dané stránce tedy při načtení stránky odešlete klíč relace, který je vhodný pro relace X, pro každý požadavek ajax bude váš JavaScript muset tento klíč předat zpět nebo ajax vrátí chybu. Jakmile vaše stránka zasáhne volání X+1 ajax, donutte uživatele, aby před odesláním nové relace provedl nějakou akci (možná captcha? Možná i něco jako událost mousemove nebo tap). stisknout drát (mimo pás od původního ajaxu) a pak proces restartovat.

I když o tom přemýšlím, je možné, že součástí vašeho problému je možná laxní validace odeslaných parametrů. Pokud si lidé mohou jen hrát s odeslanými parametry a získat zpět platná data, je obtížnější to udělat. Jak to udělat, záleží na tom, jaké hodnoty jsou odesílány klientem a jaký druh neplechu může špatný herec udělat zasláním špatných hodnot.

0
artlung