Php x requested with xmlhttprequest

Существует ли $ _SERVER [‘HTTP_X_REQUESTED_WITH’] в PHP или нет?

Всюду по Интернету, включенную даже здесь, в Stack Overflow, люди заявляют, что хороший способ проверить, является ли запрос AJAX или нет, заключается в следующем:

if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' )

Однако я не вижу $_SERVER[‘HTTP_X_REQUESTED_WITH’] в официальной документации PHP И когда я пытаюсь сделать следующее:

echo $_SERVER['HTTP_X_REQUESTED_WITH']; 

Ничего не выводится. Я что-то делаю неправильно? Потому что я действительно хотел бы использовать $_SERVER[‘HTTP_X_REQUESTED_WITH’] , если он доступен.

10 ответов

Переменные в $_SERVER не являются частью PHP, поэтому вы не найдете их в документации PHP. Они подготовлены веб-сервером, который передает их на язык сценариев. Насколько мне известно, X-Requested-With отправляется функциями Ajax большинства основных Framework, но не все (Dojo, например, добавлено только два года назад: # 5801). Как таковой, и принимая во внимание комментарии @bobince ‘, можно с уверенностью сказать, что это не как правило 100% надежный метод, чтобы определить, является ли запрос AJAX-запросом или нет. Единственный 100% -ный безопасный способ — отправить заранее определенный флаг (например, GET-переменную) вместе с запросом и для страницы-получателя, чтобы проверить наличие этого флага.

Я тоже не думаю, что это надежный метод. Инструменты брандмауэра / прокси-сервера могут работать с ним, и вы могли бы возвращать неправильный ответ прокси-пользователям, если вы не комбинируете использование этого заголовка с Vary: X-Requested-With в ответе . который, в свою очередь, портит кеширование в IE. Многие люди используют X-Requested-With , но я думаю, что это ужасная идея. Лучше передать флаг в параметрах запроса, чтобы указать, что вы хотите получить ответ в стиле XMLHttp (или JSON).

Читайте также:  Obovse ru forkplayer2 5 index html

@bobince Неужели брандмауэр будет с этим связываться? Я создаю веб-приложение, которое будет использоваться в основном из одного места, а иногда и удаленно. Было бы очень хорошо иметь возможность абстрагироваться от типа запроса, чтобы мой контроллер мог вернуть целую страницу или HTML-фрагмент в зависимости от того, был ли это запрос ajax .

@rgvcorley: типичный современный прокси не будет произвольно удалять заголовки (хотя есть несколько неприятных скрипучих сломанных, используемых мобильными сетями). Но проблема Vary обернется с вами, если у вас есть что-то кроме ответов nocache . Это не стоит хлопот, для очень незначительного улучшения красивости заголовка; пойти с простым параметром.

Спасибо за ответ — да, ты прав. Я предполагаю, что за это небольшое дополнительное усилие переменной GET вы получите преимущество, зная, что она гарантированно сработает!

Додзё НЕ является основой !! Это библиотека. И jQuery — это тоже библиотека . К сожалению, слово «рамки» превратилось в модное слово, которое часто используется неправильно.

не забывайте, что вы можете легко обманывать любой заголовок cURL, например,

curl_setopt($ch,CURLOPT_HTTPHEADER,array("X-Requested-With : XMLHttpRequest")); 

$_SERVER , начинающиеся с HTTP_ , генерируются из заголовков HTTP-запросов. В этом случае заголовок X-Requested-With .

Так все ли браузеры устанавливают этот заголовок? Кроме того, как устанавливается этот заголовок, если это AJAX-вызов?

@ Хэнк, отличающий XHR от «обычных» запросов, абсолютно бесполезен в качестве меры безопасности, поскольку каждый может без проблем смоделировать XHRequest. Вам необходимо защитить свои Ajax-скрипты, используя строгие меры аутентификации (или все, что у вас уже есть для вашего основного приложения).

Этот заголовок является стандартизирующим процессом из всех библиотек AJAX.

Он не будет документирован в документации php per se, а скорее в разных библиотеках AJAX, которые устанавливают этот заголовок. Общие библиотеки отправляют этот заголовок: jQuery, Mojo, Prototype.

Обычно эта библиотека устанавливает заголовок, используя

xhrobj.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 

Источник

Php x requested with xmlhttprequest

В этом разделе помещены уроки по PHP скриптам, которые Вы сможете использовать на своих ресурсах.

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Совет: активация отображения всех ошибок в PHP

При поднятии PHP проекта на новом рабочем окружении могут возникнуть ошибки отображение которых изначально скрыто базовыми настройками. Это можно исправить, прописав несколько команд.

Источник

Detecting AJAX requests with PHP.

This is a guide on how to detect AJAX requests with PHP.

Please note that there is NO sure-fire way of detecting AJAX requests. This is because it is extremely easy to spoof HTTP headers.

In other words, do NOT rely on this code for security.

In the vast majority of cases, JavaScript frameworks and libraries such as JQuery will automatically add the X-Requested-With header to their HTTP requests.

If you use Chrome Developer tools to inspect the AJAX requests that they send, you will find that they set the X-Requested-With header to “XMLHttpRequest“:

X-Requested-With: XMLHttpRequest

This means that you can detect AJAX requests with PHP by checking the HTTP_X_REQUESTED_WITH value in the $_SERVER superglobals array.

Here is a PHP code sample.

As I said above, you cannot trust this header, as the client can easily set the “xmlhttprequest” value to anything that they want to.

Spoofing AJAX requests with PHP.

Let’s take a look at how easy it is to fake / simulate an AJAX request using cURL and PHP.

 "XMLHttpRequest" )); //Execute the request. curl_exec($ch);

See how easy that was? In this case, we were able to change the “X-Requested-With” header to “XMLHttpRequest” using the CURLOPT_HTTPHEADER option.

If I wanted to, I could also spoof the referrer field or modify the User Agent so that the server is fooled into thinking that my simulated XHR request came from a browser.

So be warned! Do not use this type of check for security purposes.

Источник

Detect Ajax Request-Php And Frameworks

Detecting ajax request in PHP is not a very tough task and there are many ways to detect it using client side code, for example, if you send a flag/sign i.e. http://example.com?isAjax=1 with the request to the server and check it on the server side if( isset( $_GET[‘isAjax’] ) && $_GET[‘isAjax’] ) if that variable exists and contains that variable then you can make sure that the request is made using ajax. You can also set a custom header using setRequestHeader method and can check on the server side if that header is set or not and this the proper way to do this and this technic is being used by developers. An example is given below

In the given example xhr.setRequestHeader(‘X-Requested-With’, ‘XMLHttpRequest’); is setting a custom header to the request and you can retrieve this header from the $_SERVER array using $_SERVER[‘HTTP_X_REQUESTED_WITH’] for example, you can check this in PHP like

if ( isset ( $ _SERVER [ ‘HTTP_X_REQUESTED_WITH’ ] ) && $ _SERVER [ ‘HTTP_X_REQUESTED_WITH’ ] === ‘XMLHttpRequest’ )

You can also make function or class method like

Well, this is very simple and this is the most preferable technique that developers use. In this case you don’t have to use HTTP_X_REQUESTED_WITH same header, you can use your own header like xhr.setRequestHeader(‘X-Ajax-request’, ‘XMLHttpRequest’) and in PHP you can use $_SERVER[‘HTTP_X_AJAX_REQUEST’] and this will work but you should not use your own, why ?

It’s because the X-Requested-With header is not a HTTP standard header but it’s likely a de facto standard, which means this header is being used by developers and many JavaScript libraries like jQuery and Dojo uses this custom header, They send this header with every ajax request and also many PHP frameworks like Symphony , Laravel and CodeIgniter uses this technic to check the request.

Non-standard header fields were conventionally marked by prefixing the field name with X- . However, this convention became deprecated in June 2012 due to the inconveniences it caused when non-standard headers then became standard. For example, X-Gzip and Gzip are now both supported headers for compressed HTTP requests and responses. Read more

For example, Symphony’s HttpFoundation component contains following public method in the Request class

Источник

Оцените статью