2014-05-18 1 views
0

Ситуация в том, что у меня есть установка WordPress на IIS 7.5, которая обращается к Интернету через прокси-сервер, а некоторые части веб-сайта будут делать внешний запрос на стороне клиента (изображения, видео YouTube и т. Д.), В которых пользователям необходимо будет ввести свои учетные данные прокси-сервера если они обращаются к сайту через интрасеть.Как определить, обращается ли клиент к веб-сайту через интранет или Интернет?

Я хотел бы скрыть определенные элементы сайта, если он доступен через интранет, и иметь его полностью работоспособным при доступе через Интернет.

Я нашел this SO answer, который немного помог (и да, я изменил его на LOCAL_ADDR из-за IIS), но он не работает из-за прокси.

Интернет-запросы на сайт проходят через прокси-сервер, который находится в одной сети, поэтому он считает, что каждый запрос является запросом интрасети.

Итак, как я могу улучшить эту функцию для работы в моей ситуации, если я знаю прокси-IP?

function is_intranet() { 
    $serverIP = explode('.',$_SERVER['LOCAL_ADDR']); 
    $localIP = explode('.',$_SERVER['REMOTE_ADDR']); 
    return ( 
    ($serverIP[0] == $localIP[0]) && 
    (in_array($serverIP[0],array('127','10','172','192'))) 
); 
} 

ответ

0

Прокси? Полагаю, вы имеете в виду обратный прокси. Если это так, многие обратные прокси добавляют дополнительные HTTP-заголовки в исходный запрос. Проверьте, содержат ли ваши заголовки запроса «X-Forwarded-For» http://en.wikipedia.org/wiki/X-Forwarded-For
В общем, последний элемент - это то, что вы ищете.
A C# пример:

string xff = request.Headers["X-Forwarded-For"]; 
if (xff != null) 
{ 
    string[] clientIPList = xff.Split(','); 
    string ip = clientIPList.Last(); 
} 
+0

кажется, что было бы логичным решением, так как легче проверить на прокси быть там, чем проверить, если клиент находится в том же домене. – mhcodner

 Смежные вопросы

  • Нет связанных вопросов^_^