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

Как будет записываться условие для обеспечения доступа к странице с помощью запроса xmlhttp с моего сайта или из разрешенного внешнего домена?

<?php $referrer = $_SERVER['HTTP_REFERER']; if($_SERVER["HTTP_X_REQUESTED_WITH"] !== 'XMLHttpRequest') { if(preg_match("/accepteddomain.com/",$referrer) { header("Location: http://www.domain.com/desiredpage.php"); } else { header("Location: http://www.domain.com/nondesiredpage.php"); } } ?> 

Учитывая, что оба заголовка Referer и X-Request-With отправляются (или не отправляются) клиентом (браузером или чем-либо еще, что может отправлять HTTP-запрос) , им нельзя доверять.

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

В принципе, вы не можете быть уверены, что запрос поступает из определенного домена (даже для XmlHttpRequest: браузер может использовать XHR только в том же домене … Но вы не можете быть уверены, что запрос, который вы получаете, или нет, исходя из XHR) .

Среди возможных идей (не уверен, какова ваша настоящая проблема / необходимость) , вы можете попробовать использовать какой-то API-ключ, чтобы ограничить ставки запросов или так?

Вы правильно указали рефереру, но, к сожалению, человек, который написал спецификацию HTTP, не смог! Вам нужно использовать HTTP_REFERER .

Вы также можете избежать точки \. поэтому он соответствует только точке, а не всему.

Запросы Ajax возможны только из одного домена. Вы не можете сделать запрос XMLHttp с другого сайта из-за встроенных соображений безопасности.

На этом сайте четко указано, что вы не можете запустить междоменный XMLHTTPRequest http://developer.yahoo.com/javascript/howto-proxy.html

Все современные веб-браузеры накладывают ограничение безопасности на сетевые подключения, которое включает вызовы XMLHttpRequest. Это ограничение запрещает сценарию или приложению устанавливать соединение с любым веб-сервером, отличным от того, на котором была первоначально выведена веб-страница (Internet Explorer разрешает междоменные запросы, если опция включена в настройках). Если и ваше веб-приложение, и данные XML, которые использует приложение, поступают напрямую с одного и того же сервера, вы не сталкиваетесь с этим ограничением.

Вы должны знать, что заголовки HTTP легко подделываются, поэтому кто-то может легко telnet и отправить этот HTTP-заголовок и получить доступ к странице. Не полагайтесь на HTTP REFERER для конфиденциальных данных. Единственная разумно безопасная профилактика – использование логинов.