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
Форумы портала PHP.SU :: Версия для печати :: Проверка на ajax запрос
Форумы портала PHP.SU » » HTTP и PHP » Проверка на ajax запрос

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

1. BAS-P - 13 Марта, 2013 - 13:53:17 - перейти к сообщению
Добрый день.
Существует ли в PHP точная проверка на ajax запрос?
Проверки на заголовки типа $_SERVER['HTTP_X_REQUESTED_WITH'] можно легко подделать с помощью cURL.
2. armancho7777777 - 13 Марта, 2013 - 14:02:28 - перейти к сообщению
Нет.
Просто работайте с данными запросами как с обычными:
фильтрация входных данных + проверка на login, если доступ должен быть закрыт.
3. DelphinPRO - 13 Марта, 2013 - 14:53:48 - перейти к сообщению
а какой смысл точной проверки?

этого достаточно
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, работаем с этим запросом также, как и с обычным, соблюдая все меры безопасности.
4. Мелкий - 13 Марта, 2013 - 15:37:32 - перейти к сообщению
DelphinPRO пишет:
чтобы определить, что пришел аякс запрос

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

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

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

в смысле - параметр адресной строки?
7. armancho7777777 - 13 Марта, 2013 - 17:02:40 - перейти к сообщению
DelphinPRO пишет:
в смысле - параметр адресной строки?


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

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


Или:

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

PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['ajax']))
  2. {
  3.      /*....*/
  4. }
8. DeepVarvar - 13 Марта, 2013 - 17:25:36 - перейти к сообщению
armancho7777777 пишет:
url = '?context=ajax';
Да, да, почти Улыбка
(Добавление)
Можно ж еще явно просить по расширению:

/module/controller/action.html
/module/controller/action.json
/module/controller/action.xml
/module/controller/action.txt
9. armancho7777777 - 13 Марта, 2013 - 17:29:24 - перейти к сообщению
Улыбка
(Добавление)
И то верно Подмигивание
10. DelphinPRO - 13 Марта, 2013 - 17:46:01 - перейти к сообщению
DeepVarvar пишет:
Можно ж еще явно просить по расширению:
все гениальное - просто Улыбка
11. armancho7777777 - 13 Марта, 2013 - 17:57:03 - перейти к сообщению
Я использую вариант без расширения просто:
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.         // .................

 

Powered by ExBB FM 1.0 RC1