2010-07-11 2 views
2

У меня есть несколько страниц, настроенных так, чтобы они отвечали только на запросы ajax. Дело в том, что как я могу настроить его так, что если кто-то попытается отправить запросы через окно браузера, то, набрав их, они не запускаются и запускаются только при вызове ajax. Страницы находятся в php здесьУбедитесь, что ваша страница не запрашивается через ajax?

+0

В дополнение к поиску заголовка, вы можете отправить правильный тип контента как 'приложения/json', который подскажет, чтобы загрузить по крайней мере в Firefox. Он * может * работать в качестве 5-секундного сдерживающего фактора: P – alex

+1

Как уже упоминалось другими, имейте в виду, что эти вещи можно подделать. –

ответ

12

Нет никакого надежного способа отличить запрос AJAX от обычного запроса. Некоторые библиотеки, такие как jQuery, добавят к запросу дополнительный HTTP-заголовок X-Requested-With: XMLHttpRequest, но другие могут не работать. Вы можете подделать запрос AJAX, используя объекты низкого уровня, предоставляемые браузером, которые выглядят точно так же, как и обычный запрос, поэтому не полагайтесь на многое.

+0

Никогда не думал об этом - пока я просто поставлю чеки для дополнительных заголовков. – Ali

+0

@DarinDimitrov, могу я попросить вас взглянуть на http://stackoverflow.com/questions/11548965/file-get-contents-or-curl-way-nothing-works-in-internet-server-though-thos на php get_file_contents() и curl() проблема? –

5
define('XHR', (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')); 

Если вы настраиваете http-заголовок JS (автоматически выполняется в jQuery), используйте эту константу.

+0

HTTP-заголовки легко подделать. Это только замедлит кого-то, а не остановит их. – James

+1

замедление их - это то, что вы хотите. Чем труднее это делать, тем менее вероятно, что люди это сделают. Замки на дверях/окнах и т. Д. Не помешают людям проникнуть в ваш дом, но они будут менее склонны. – Richard

2

Вся информация, которую вы могли проверить (заголовки, реферер и т. Д.), Поступает из браузера и может быть подделана.

Если пользователь правильно аутентифицирован (например, через файл cookie + токен данных), вы не подвергаете больше своей системе через окно браузера, чем обычное использование ajax.

2

AJAX сделан внутри окно браузера. Я предполагаю, что вы хотели, чтобы люди не обращались к нему, набрав URL-адрес в браузере. Вы можете просто использовать POST. Кто-то должен написать HTML для доступа к вашей странице.

Вы также можете отправить запрос в формате JSON, добавить настраиваемый заголовок и т.д.

2

Если вызов Ajax URL вручную (или инструмент) может сделать что-то опасное на сервере нет solution.If его для безопасности причины, по которым вам необходимо защитить код, который обрабатывает вызов ajax. Разрешайте только те, которые не могут навредить.

+1

Согласен, нет способа блокировать его, поэтому вместо этого исправьте свою систему, чтобы кто-то это делал, это не проблема. – JAL

0

Там нет такой стабильный путь для этого

Смежные вопросы