предположим, что я работаю с каким-то API, и мой файл server.php обрабатывает соединение с сервисом API. на моей стороне клиента я использую вызов AJAX следующим образом:
$http({ url : 'server/server.php', method : 'GET', data : { getContent : true } });
в моем server.php я обрабатываю это следующим образом:
if(isset($_GET['getContent'])){ $content = get_content(); } function get_content(){...}
Я просто задаюсь вопросом, что мешает кому-либо отправить вызов AJAX с тем же параметром getContent и получить все мои данные? как я могу его защитить и убедиться, что только вызовы из моего приложения вернут соответствующие данные?
Спасибо!
Наверное, вас беспокоят атаки CSRF. Подробнее об этом читайте здесь: https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
Одним из наиболее часто используемых вариантов защиты вашего запроса будет: – создать токен и отправить его с запросом на сеанс. Этот токен может быть идентифицирован вашим WebServer как исходящий от конкретного клиента для определенного сеанса
Я просто задаюсь вопросом, что мешает кому-либо отправить вызов AJAX с тем же параметром getContent и получить все мои данные?
Ничего. Этот URL-адрес является общедоступным, поэтому любой может запросить его.
как я могу его защитить и убедиться, что только вызовы из моего приложения вернут соответствующие данные?
Вы можете передать дополнительные данные (например, некоторое хешированное значение), которые проверяются на стороне сервера.
$http({ url : 'server/server.php', method : 'GET', data : { getContent : true, hash : '0800fc577294c34e0b28ad2839435945' } });
а также
if(isset($_GET['getContent'])) { if(isset($_GET['hash']) && validateHash($_GET['hash'])) { $content = get_content(); } } function get_content(){...}
Я просто задаюсь вопросом, что мешает кому-либо отправить вызов AJAX с тем же параметром getContent и получить все мои данные?
Точно так же вы будете защищать данные в любом другом запросе (например, с помощью аутентификации пользователя). В Ajax нет ничего особенного в отношении HTTP в отношении сервера.
как я могу его защитить и убедиться, что только вызовы из моего приложения вернут соответствующие данные?
Вы не можете. Пользователь всегда может проверить, что их браузер запрашивает у сервера и реплицирует его.
Как правило, люди аутентифицируют пользователей, а не приложения.