2014-05-18 46 views
0

这种情况是,我在IIS 7.5上安装了一个WordPress安装程序,它通过代理访问互联网,并且网站的某些部分将提出需要用户输入其代理凭证的客户端外部请求(图片,YouTube视频等)如果他们通过Intranet访问该网站。我如何确定客户端是通过Intranet还是Internet访问网站?

我想隐藏网站的某些元素,如果它是通过Intranet访问的,并且如果通过互联网访问它将具有完全功能。

我发现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

相关问题