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

Как будет написано условие, обеспечивающее доступ к странице по запросу 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");
        }
    }
?>

Ответы [ 4 ]

2 голосов
/ 10 марта 2011

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

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

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


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

1 голос
/ 10 марта 2011

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

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

0 голосов
/ 10 марта 2011

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

0 голосов
/ 10 марта 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...