Как будет записываться условие для обеспечения доступа к странице с помощью запроса 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 для конфиденциальных данных. Единственная разумно безопасная профилактика – использование логинов.