1. Головна
  2. Колонка автора
  3. Дозволити доступ лише через AJAX

Дозволити доступ лише через AJAX

Однією з перевірок при використанні технології Ajax, які необхідно включити до скрипту відправлення даних від користувачів сайту, є перевірка надходження даних, які можуть надіслати не тільки через Ajax, але і безпосередньо напряму.
Дозволити доступ лише через AJAX
Як працює передача даних напряму? Розберемо все по порядку. Наприклад, ми маємо форму та скрипт:
<input type="text" id="name" value="" />
<input type="submit" id="send" value="Надіслати" />

<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script>
$(document).ready(function(e){
$('body').on('click', '#send', function(e){
$.ajax({
type: "POST",
url: "/ajax.php",
data: {'name': $('#name').val()}
});
});
});
</script>

І, відповідно виконуваний файл AJAX (ajax.php):
<?php
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test.txt', $_POST['name']);
?>

Зараз нам неважливо, що буде виконувати скрипт, але в даному прикладі ми записуємо у файл значення поля Name. За такої реалізації можна обійтися без AJAX, просто додавши атрибут FORM у форму із зазначеним виконуваним AJAХ файлом та замінивши ID на NAME:
<form action="/ajax.php" method="POST">
<input type="text" name="name" value="" />
<input type="submit" name="send" value="Надіслати" />
</form>

І все пройде успішно. Тобто, спам робот без проблем надішле дані навіть без використання браузера. Для того, щоб цього не сталося та дозволити доступ тільки через AJAX, необхідно додати умову:
<?php
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] !== 'XMLHttpRequest') exit();
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test.txt', $_POST['name']);
?>

При даній реалізації виконується перевірка на технологію відправлення даних, і якщо цей метод не XMLHttpRequest - припиняємо виконання скрипта. Для технології Ajax необхідний браузер, оскільки JavaScript виконується саме в ньому, а оскільки спам роботи надсилають дані безпосередньо, блокування не дасть скрипту виконатися.
Важливо також відзначити, що немає надійного способу дізнатися, що запит було зроблено через Ajax. Ніколи не можна довіряти даними, що надходять від клієнта, і, крім того, практично будь-який метод може бути підмінений. Але реалізація кількох різних перевірок значно підвищує безпеку вашого скрипту.
Редакція «КовельPost» може не поділяти думку блогерів або дописувачів. За зміст публікацій і їх достовірність відповідальність несуть автори.

Коментарі

Підписуйтесь на наш канал у Telegram! 🚀

@kovelpost