Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Проверка источника AJAX запроса внутри вызываемого скрипта
Покинул форум
Сообщений всего: 52
Дата рег-ции: Май 2015
Помог: 0 раз(а)
Проблема следующая
Со страницы сайта с помощью AJAX запроса вызывается скрипт execute_query.php который выполняет sql запрос в базу данных.
Скрипту передается параметр query - который содержит запрос к базе данных.
Можно ли достоверно убедиться что AJAX запрос пришел от внутреннего скрипта сайта, а не от стороннего скрипта?
Для простоты понимания проблемы
Если AJAX запрос с методом GET то зарегистрированному пользователю для выполнения своего собственного запроса достаточно лишь виполнить следующий HTTP запрос http://www[dot]site/inner_path/execu[dot][dot].php?query=запрос пользователя.
Если запрос с методом POST то надо написать простенький HTML документ в котором будет послан AJAX запрос.
Единственное что этому припятствует это знание структуры базы данных.
DelphinPRO
Отправлено: 14 Января, 2016 - 11:13:56
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
прямо вот так запрос и приходит? зачем? почему не отдельные параметры? (Добавление)
по сабжу - проверить достоверно нельзя. любой запрос можно подделать.
----- Чем больше узнаю, тем больше я не знаю.
Faraon-san
Отправлено: 14 Января, 2016 - 11:31:15
Посетитель
Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013
но как и говорил DelphinPRO подделать можно любой запрос, можно максимально усложнить это, но все равно смогут подделать.
Flash_PR
Отправлено: 14 Января, 2016 - 11:45:20
Посетитель
Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013 Откуда: Санкт-Петербург
Помог: 6 раз(а)
Интересный для меня вопрос, а именно передача данных и защита от их подмены. Конечно передавать готовый запрос не очень хорошо, передай id записи в таблице. Для защиты от подмены id (если это принципиально) я добавлял еще один параметр хеш id с солью естественно. и в скрипте проверял хэш пришедших данные(id) с пришедшим хэшом. Но возможно это не самое лучшее решение, гуру может быть подскажут как лучше?
----- Умные мысли приходят тогда, когда все глупости уже сделаны...
DelphinPRO
Отправлено: 14 Января, 2016 - 13:52:26
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Faraon-san пишет:
X-Requested-With
Следует помнить, что этот заголовок не отправляется браузером автоматически при выполнении аякс запроса (например когда вы сами пишете функцию с использованием XMLHttpRequest). Этот заголовок добавляет библиотека jquery (и другие)
Ну и раз это обычный заголовок, не составляет никакого труда послать его в подделанном запросе.
2 ТС
Используйте, стандартные в таких случаях механизмы защиты от подделки межсайтовых запросов (CSRF) - секретные токены.
Вопрос, зачем нужно передавать в запросе SQL в чистом виде, остается открытым.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.