2017-02-21 13 views
1

Я хочу ограничить вызовы AJAX, отличные от моего приложения. Я не хочу, чтобы мой запрос AJAX отправлял ответ при вызове извне моего приложения, даже когда URL-адрес звонка AJAX копируется и вставляется в браузере. Я использую узел, выражение и mongodb.Ограничить вызовы ajax извне приложения узла

+2

Вы можете проверить домен запроса или указать его в какой-либо форме авторизации. – George

+0

@George Да, я могу это сделать, но представьте себе сценарий, когда я просто копирую URL-адрес запроса и открываю его в самом браузере, тогда он все равно будет успешно реагировать. Я тоже хочу этого избежать. «в какой-то форме авторизации» Какая аутентификация? –

ответ

0

Что я сделал добавить некоторые заголовки в моих 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 не знаю, как это сделать, я предлагаю исследовать больше об этом.

+0

Спасибо за ответ, но перенаправление ссылок и заголовков довольно легко сделать, как я могу избежать этого? –

+0

Спасибо @Mac. Я реализовал то же самое в своем приложении, и теперь он работает нормально. –

0

Если ваше приложение работает на компьютере пользователя (например, в веб-приложении JavaScript), невозможно запретить кому-либо совершать вызовы из-за пределов вашего приложения. Вы можете сделать это сложнее, используя nonce с каждым запросом, но даже тогда кто-то может создать собственное приложение, которое имитирует ваше приложение и делает вызовы в правильном порядке.

Вкратце: вы никогда не сможете полностью доверять клиенту, и вы не можете помешать кому-то подменять клиента. Вам необходимо пересмотреть свои требования.