Dobrý večer.
Chtěl bych se zeptat, zda je bezpečné přepínat stránky na webu přes AJAX (tzn. že se nebude celá stránka znovu načítat).
Napadlo mě to udělat tak, že při kliku na odkaz zašlu přes AJAX příkaz na soubor, do kterého se podle $_POST vloží soubor s daným názvem ( ochráněno přes if (in_array($_POST['soubor'])) ).
Napadlo mě zároveň názvy těch souboru hashovat, aby uživatel nemohl najít název souboru ze zdrojového kódu.
Co si o tom myslíte vy?
Hashování názvu souboru je zbytečné a ztěžuje ladění. Stačí kvalitně kontrolovat data, která vstupují do PHP, např. souhlas session a IP. Musíš si aplikaci napsat tak, aby se AJAXem posílaly jen akce hráče, ty se testují snadno.
Je tedy nějaká možnost zabránit uživateli, aby si zadal cestu k souboru v URL? Pokud použiji deny from v .htaccess, pak nebude možnost ani zaslat dotaz přes AJAX.
Chtěl bych si tak udělat web, ale nevím, jaké je na to nejlepší řešení. :(
Často se to filtruje přes hlavičku References:, ale i to se dá obejít a některé prohlížeče s tím mohou mít problémy.
Ty prostě nechceš, aby někdo místo sebe pouštěl bota, viď? Takže potřebuješ nějaký Turingův test.
Zadání cesty přes URL nelze zabránit.
Volání AJAXu není nic jiného než další volání požadavku. AJAX je podstatě další uživatel, který zadává URL, aby si mohl načíst stránku. Pokud zabráníš volání uživatelem, tak vlastně zabráníš volání i AJAXem.
Ale můžeš částečně ovlivnit funkčnost pomoci detekce hlavičky. Ale ne všude to bude fungovat. Při použití knihovny jQuery by toto mělo fungovat.
function isAjax ()
{
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
return true;
return false;
}
Tomík: Podle mne je to jen další obstrukce, která se dá obejít. Může to pomoci, ale ne na dlouho.
Já bych jen rád prohlížel stránky bez nutnosti načítání stránky a zároveň to, aby uživatel nemohl prohlížet jejich obsah tak, že si do URL zadá absolutní cestu.
Každopádně to asi jednoduše nepůjde, tak bych se rád zeptal, zda mohu bez obav použít jQuery funkci load.
A když už je téma o tom AJAXu - je nějaký rozdíl mezi posíláním formulářů přes AJAX než přes tlačítko submit? Jestli mám něco specielně ošetřovat nebo tak.
Jinak se omlouvám, ale stále jsem začátečník, tak se hloupě ptám.