Я хочу ограничить вызовы AJAX, отличные от моего приложения. Я не хочу, чтобы мой запрос AJAX отправлял ответ при вызове извне моего приложения, даже когда URL-адрес звонка AJAX копируется и вставляется в браузере. Я использую узел, выражение и mongodb.Ограничить вызовы ajax извне приложения узла
ответ
Что я сделал добавить некоторые заголовки в моих Ajax вызовов:
// javascript
$.ajax({
type: 'POST',
dataType: 'json',
headers: {"Content-Type": "application/json", "app-ver": 1.5}
})
.
// php
$client_ver = floatval($_SERVER['HTTP_APP_VER']);
// I also check $_SERVER['CONTENT_TYPE'] to be: 'application/json'
// and post method. (ask me I'll add)
if ($client_ver != 1.5)
{
echo '{}';
exit();
}
Edit: Другой способ будет создавать «сеанс» с вашим приложением, то есть, каждый запрос после успешного входа в систему должен нести token (по крайней мере) и приложите ваше приложение к множеству уникальных ключевых значений ключа, которые распознаются только вашим сервером, а не любые два запроса (например: включить время в заголовке и хеш с командой REST и сервер проверяет его, чтобы убедиться, что это уникальная команда, и ее не просто манипулируют. * Вы должны знать свой алгоритм создания сеанса, и он должен быть уникальным, или если y ou не знаю, как это сделать, я предлагаю исследовать больше об этом.
Спасибо за ответ, но перенаправление ссылок и заголовков довольно легко сделать, как я могу избежать этого? –
Спасибо @Mac. Я реализовал то же самое в своем приложении, и теперь он работает нормально. –
Если ваше приложение работает на компьютере пользователя (например, в веб-приложении JavaScript), невозможно запретить кому-либо совершать вызовы из-за пределов вашего приложения. Вы можете сделать это сложнее, используя nonce с каждым запросом, но даже тогда кто-то может создать собственное приложение, которое имитирует ваше приложение и делает вызовы в правильном порядке.
Вкратце: вы никогда не сможете полностью доверять клиенту, и вы не можете помешать кому-то подменять клиента. Вам необходимо пересмотреть свои требования.
Вы можете проверить домен запроса или указать его в какой-либо форме авторизации. – George
@George Да, я могу это сделать, но представьте себе сценарий, когда я просто копирую URL-адрес запроса и открываю его в самом браузере, тогда он все равно будет успешно реагировать. Я тоже хочу этого избежать. «в какой-то форме авторизации» Какая аутентификация? –