2013-08-26 45 views
1

如何確定用戶是否從互聯網或內部網訪問我的應用程序?乾淨的方式來識別來自內部網或互聯網的用戶

我很關心IIS服務器變量的來源和安全性。例如, http://msdn.microsoft.com/en-us/library/ms524602.aspx 對於遠程用戶是否爲Request.ServerVariables [「AUTH_USER」]爲空?

此外,在http://msdn.microsoft.com/en-us/library/system.environment.userdomainname.aspx 上Environment.UserDomainName的文檔讓我覺得這是可以通過命名計算機名稱等於我檢查

理想的域名到遊戲這個,我只是想...

if ([ ... user is not remote ... ] && Enironment.UserDomainName == "TargetLocalDomainName") 
    var username = Environment.UserName; 
    PrepareLocalUserSession(username); 
    RedirectToHomePage(); 
} 
//else 
[... redirect to remote login page ...] 

所以我的問題是我如何確定用戶是否從遠程目標?如果可能的話,我寧願使用比IP檢查更少雜亂的東西。

感謝


編輯

我以爲我上面的方法是太可怕了,我想發佈一個理智的方式

var hostAddress = System.Web.HttpContext.Current.Request.UserHostAddress; 

bool localUser = hostAddress.StartsWith("192.") | hostAddress.StartsWith("10.") | hostAddress.StartsWith("172.") || HttpRequest.Current.Request.IsLocal; 

string username = Request.ServerVariables["LOGON_USER"].split(new char[]{"/"})[0]; 
string domain = Request.ServerVariables["LOGON_USER"].split(new char[]{"/"})[1]; 

if(localUser && domain == "TargetLocalDomainName"){ 
    PrepareLocalUserSession(username); 
    RedirectToHomePage(); 
} 

//else 
[... redirect to remote login page ...] 
+0

注意自己:如果使用IP方法,也允許本地調試請求,以及=>'HttpRequest.Current.Request.IsLocal | ' – user1778606

回答

1

首先,你不能使用Environment類獲取有關向用戶發送請求的信息。 Environment訪問本地計算機的環境,因此您將始終獲取服務器的詳細信息。沒有什麼會告訴你有關客戶的事情。

所有可用於服務器的客戶端信息將位於Request對象中。如果您在網站上使用身份驗證,則可以讓用戶登錄,然後在System.Web.HttpContext.Current.Request.LogonUserIdentity中查看用戶的安全詳細信息。

但是這仍然不會告訴你客戶實際在哪裏。測試用戶的登錄域只會告訴您用戶是否針對域進行了身份驗證,而不是客戶端是否位於本地網絡上。如果您的網站可以從您的網絡外部訪問(例如使用NAT,或者在服務器上使用混合的公共+私人地址),您仍然需要檢查請求上的IP地址以確保它位於本地網絡中。

所以簡單的答案是,如果不根據已知的內部網絡範圍檢查IP地址,就無法做到這一點。

+0

很好的環境。它可能適用於非客戶端服務器場景,但它幾乎肯定會出於網絡目的失敗。 – user1778606

相關問題