Разрешить доступ к файлу PHP только через ajax на локальном сервере

У меня есть веб-сайт, который должен увеличивать значения в базе данных на основе взаимодействия с пользователем. Когда пользователи нажимают кнопку, вызывается скрипт php, который увеличивает значение. Я хотел бы защитить этот скрипт от доступа к внешним скриптам. В настоящее время пользователь может написать свою собственную веб-страницу с функцией javascript, которая неоднократно удаляет один и тот же файл php, чтобы взорвать значение в базе данных.

Вот мой код jquery, который увеличивает значение:

jQuery(function(){ $('.votebtn').click(function(e){ var mynum = $(this).attr('id').substring(0,5); $.ajax({ url:"countvote.php", type:"GET", data: { thenum:mynum }, cache: false, success:function(data) { alert('Success!'); } } }); }); }); 

Как я могу это сделать, чтобы только вызов из ajax / jquery на локальном сервере мог получить доступ к «countvote.php»? Если это не правильный путь, я открыт для любого предложения, которое предотвратит злоупотребление скриптом php внешними скриптами.

Решение требует двух шагов.

Во-первых, файл ajax должен разрешать доступ только в ajax-запросе с помощью этого кода.

 define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); if(!IS_AJAX) {die('Restricted access');} 

Во-вторых, файл ajax имеет доступ к имени файла, который вызывает его с помощью команды $ _SERVER ['HTTP_REFERER']. Таким образом, вы можете ограничить доступ только на главном сервере.

 $pos = strpos($_SERVER['HTTP_REFERER'],getenv('HTTP_HOST')); if($pos===false) die('Restricted access'); 

Возможно, код может работать только со второй частью

Вы можете проверить, равен ли $_SERVER['HTTP_X_REQUESTED_WITH'] xmlhttprequest , но не является надежным способом определить, является ли запрос AJAX-запросом или нет, всегда есть способ обойти это. Но он защищает вас от случайных ударов, таких как ошибочно введенные URL-адреса, сканеры и т. Д.

На самом деле это не 100% метод. Запросы AJAX всегда поступают от клиента. Используйте POST-запросы вместо GET, и это поможет сдержать любые проблемы, но не полностью остановить их и на вашем php, просто отбросьте все запросы на получение.