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 запрос

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
BAS-P
Отправлено: 13 Марта, 2013 - 13:53:17
Post Id


Гость


Покинул форум
Сообщений всего: 74
Дата рег-ции: Июнь 2012  


Помог: 1 раз(а)




Добрый день.
Существует ли в PHP точная проверка на ajax запрос?
Проверки на заголовки типа $_SERVER['HTTP_X_REQUESTED_WITH'] можно легко подделать с помощью cURL.
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Марта, 2013 - 14:02:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Нет.
Просто работайте с данными запросами как с обычными:
фильтрация входных данных + проверка на login, если доступ должен быть закрыт.

(Отредактировано автором: 13 Марта, 2013 - 14:02:51)

 
 Top
DelphinPRO
Отправлено: 13 Марта, 2013 - 14:53:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




а какой смысл точной проверки?

этого достаточно
PHP:
скопировать код в буфер обмена
  1. $this->requestAjax   = isset($_SERVER['HTTP_X_REQUESTED_WITH'])
  2.         && !empty($_SERVER['HTTP_X_REQUESTED_WITH'])
  3.         && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';

чтобы определить, что пришел аякс запрос и отдать данные, допустим, не в html, а в json формате.

В остальном, как сказал armancho7777777, работаем с этим запросом также, как и с обычным, соблюдая все меры безопасности.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 13 Марта, 2013 - 15:37:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DelphinPRO пишет:
чтобы определить, что пришел аякс запрос

Я больше скажу - этого заголовка может не быть при запросе обычным браузером. Некоторые прокси срезают заголовки, посчитав их лишними.

BAS-P пишет:
Существует ли в PHP точная проверка на ajax запрос?

Не существует для HTTP в принципе.


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Марта, 2013 - 15:58:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Мелкий пишет:
Я больше скажу - этого заголовка может не быть при запросе обычным браузером. Некоторые прокси срезают заголовки, посчитав их лишними.
Ага, а добавив контексты вывода xml и txt, к уже имеющимся html и json, я понял что от HTTP_X_REQUESTED_WITH вообще стоит отказаться и просто использовать $_GET['context'].
Кому что надо - то и попросят.
 
 Top
DelphinPRO
Отправлено: 13 Марта, 2013 - 16:51:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




DeepVarvar пишет:
просто использовать $_GET['context'].

в смысле - параметр адресной строки?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Марта, 2013 - 17:02:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




DelphinPRO пишет:
в смысле - параметр адресной строки?


CODE (javascript):
скопировать код в буфер обмена
  1. url = '?context=ajax';

PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['context']))
  2. {
  3.      if($_GET['context'] == 'ajax')
  4.      /*....*/
  5. }


Или:


PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['ajax']))
  2. {
  3.      /*....*/
  4. }

(Отредактировано автором: 13 Марта, 2013 - 17:09:14)

 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Марта, 2013 - 17:25:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




armancho7777777 пишет:
url = '?context=ajax';
Да, да, почти Улыбка
(Добавление)
Можно ж еще явно просить по расширению:

/module/controller/action.html
/module/controller/action.json
/module/controller/action.xml
/module/controller/action.txt
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Марта, 2013 - 17:29:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Улыбка
(Добавление)
И то верно Подмигивание
 
 Top
DelphinPRO
Отправлено: 13 Марта, 2013 - 17:46:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




DeepVarvar пишет:
Можно ж еще явно просить по расширению:
все гениальное - просто Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
armancho7777777 Супермодератор
Отправлено: 13 Марта, 2013 - 17:57:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Я использую вариант без расширения просто:
CODE (javascript):
скопировать код в буфер обмена
  1. $.get('?ajax_action=\\packages\\pages\\rooms\\ViewMore::imageRender', params, function(result){ // ....


\system\front\Controller:
PHP:
скопировать код в буфер обмена
  1.  
  2. namespace system\front;
  3.  
  4.  
  5. abstract class Controller {
  6.  
  7.         // ....
  8.  
  9.         final public static function ajaxAction()
  10.         {
  11.                 return !empty($_GET['ajax_action']) ? $_GET['ajax_action'] : false;
  12.         }
  13.        
  14.         final public static function init()
  15.         {
  16.                 if(self::ajaxAction())
  17.                 {
  18.                         if(
  19.                                 !preg_match(
  20.                                         '~^(?P<obj>[A-z_\\\]+[\d]*)::' .
  21.                                         '(?P<method>[\A-z_]+[\d]*)$~',
  22.                                         self::ajaxAction(),
  23.                                         $action
  24.                                 )
  25.                         )
  26.                         {
  27.                                 throw new \system\exceptions\Base(
  28.                                         'Не корректные данные: ' .
  29.                                         htmlspecialchars(self::ajaxAction())
  30.                                 );
  31.                         }
  32.                        
  33.                         extract($action);
  34.  
  35.                         echo json_encode(array('response' => (new $obj())->$method()));
  36.                        
  37.                         die;
  38.                 }
  39.        
  40.  
  41.  
  42.         // .................

(Отредактировано автором: 14 Марта, 2013 - 08:09:35)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB