Как я могу надежно проверить, что запросы на мой сервисный файл поступили с моего сайта?
У меня есть класс service.php, который я использую для обслуживания вызовов AJAX с моего сайта. Чтобы другие люди не могли получить доступ к сервису с помощью PHP CURL, я бы обычно проверял, что запрос поступил от mysite, а если нет, просто перенаправьте на мою домашнюю страницу, например
if($_SERVER['HTTP_REFERER'] != "http://www.mysite.com"){
header('location: http://www.mysite.com');
exit;
}
Я прочитал в PHP священную библию:
тот
"Не все пользовательские агенты будут устанавливать это, а некоторые предоставляют возможность изменять HTTP_REFERER как функцию. Короче говоря, этому нельзя доверять".
Поэтому, если этот метод не является надежным, мой вопрос заключается в том, как я могу надежно проверить, что запросы на мой сервисный файл поступили с моего сайта?
Спасибо за любую помощь, вы можете предоставить!
2 ответа
Вам необходимо создать небольшой файл cookie сеанса, который включает время запроса страницы, IP-адрес запрашивающей стороны и некоторую секретную строку, которая время от времени меняется (то есть действительна в течение часа или около того). Файл cookie должен быть зашифрован. Теперь, когда сделан вызов AJAX, вы проверяете куки, сравниваете IP, проверяете секретную строку и действуете соответственно.
Но, по правде говоря, это сделает задачу хакера более сложной, но не невозможной. Поэтому вам нужно добавить HTTPS в уравнение, и даже тогда хороший троян на компьютере клиента сделает возможным ложный запрос. Но для большинства сценариев вышеупомянутый + HTTPS отгонит злоумышленника.
Вы не можете легко, я думаю. Что вы можете сделать, так это сделать свои собственные файлы всегда размещать какую-то парольную фразу. Скажем, вы отправили некоторые данные (datetime?) И хэш "datetime+secretstring"
Как только вы знаете секретную строку, только вы можете создать хеш. Повторно создайте хеш во втором файле, используя полученную дату и время, и проверьте, верен ли отправленный хеш.
Запросы с других сайтов не будут содержать ваш хэш и дату и время или, по крайней мере, неправильный.