2008-09-05 2 views
1

웹 사용자가 외부 사용자보다 다르게 행동해야하는 웹 응용 프로그램이 있습니다. 웹 응용 프로그램은 인터넷을 통해 사용할 수 있으므로 분명히 내부 사용자에게도 제공됩니다.브라우저 IP 또는 호스트 이름을 얻는 방법은 무엇입니까?

모든 사용자는 익명으로 인증되지 않지만 외부 사용자보다 내부 사용자에 대해 다르게 렌더링되어야합니다. 내 코드에서 무엇을하는지는 Request.UserHostName을 사용하고 Dns.GetHostEntry을 사용합니다. 그 결과는 내 web.config에있는 설정과 비교됩니다 (예 : *.mydomain.local). 비교 결과가 긍정적이면 외부 사용자가 볼 HTML을 렌더링합니다. 그렇지 않으면 내부 사용자가 볼 수있는 HTML을 렌더링합니다.

그러나 내 문제는 내가 항상 Request.UserHostName에서 예상되는 값을 얻지 못한다는 것입니다. 개발 사이트에서 브라우저를 실행하는 컴퓨터의 IP-number (?)을 얻지 만 사용자 사이트에서 IP-number을 얻지 못하면 고객 사이트에서 IP-number을 얻게됩니다. 브라우저에는 프록시가 설정되어 있지 않습니다.

Request.UserHostName 이외의 것을 사용해야합니까?

답변

3

IP 주소도 사용하는 것이 좋습니다. 나는 정확히 똑같은 상황을 다루고 있는데 지금은 인증 시스템을 설정하고 Epso와 Robin M에 의해 묘사 된 조건은 정확하게 일어나고 있습니다. 사이트에 오는 외부 사용자는 실제 IP 주소를 제공하지만 모든 내부 사용자는 웹 서버가 앉아있는 개인 서브넷에 게이트웨이 시스템 (라우터)의 IP를 제공합니다.

나는 그것을 처리하기 위해 단지 하나의 IP만을 확인합니다. 게이트웨이의 IP를 얻으면 내부 액세스를 제공합니다. 만약 내가 다른 것을 얻으면 그들은 내 경우에 추가적인 인증을 요구하는 외부 인증서를 얻는다. 너의 경우, 그것은 다른 인터페이스를 의미 할 뿐이다.

0

내부의 클라이언트가 외부 DNS 이름을 사용하여 서버에 도달 할 수 있도록 일종의 NAT를 수행하는 방화벽이있을 수 있습니다.

고객 사이트의 IP 번호는 외부 고객 서버 IP에서 동일합니까? 이 경우 하나의 IP 주소에 대해 하드 코드를 작성할 수 있습니다. 해당 방화벽 뒤의 모든 내부 컴퓨터는 동일한 IP 주소가 있어야하며 "내부"로 분류 할 수 있습니다.

0

공개 IP 주소가 반환되는 것처럼 보입니다. 사용자가 http://www.myipaddress.com으로 이동하도록 유도합니다. 이것이 귀하의 소프트웨어에 반환 된 IP 주소와 동일하다면 이것은 분명합니다.

이 문제를 해결할 수있는 유일한 해결책은 VPN을 통해 asp.net 응용 프로그램을 보유하고있는 컴퓨터에 연결하거나 다른 종류의 인증을 사용하도록하는 것입니다. 후자가 아마도 최선의 선택 일 것입니다.

2

Try Request.UserHostAddress는 클라이언트의 IP 주소를 반환합니다. 내부 네트워크가 LAN 용으로 예약 된 IP 주소를 사용한다고 가정하면 IP가 내부 또는 외부인지 여부를 확인하는 것이 상대적으로 간단해야합니다.

0

고객 사이트의 사용자와 서버 사이에 프록시가있는 것처럼 들리지만 (브라우저에서 구성 할 필요가 없음) 네트워크 구성에 따라 내부 또는 외부 프록시 일 수 있습니다.

사실상 인증을 위해 UserHostName을 사용하지 마십시오. 브라우저가 요청을 받아들이 기 때문에 쉽게 스푸핑 할 수 있습니다. IP 주소는 TCP/IP 연결에서 IP 주소를 스푸핑 (및 연결 유지)하기가 어렵 기 때문에 훨씬 더 효과적입니다. 그것은 여전히 ​​약한 인증이지만이 시나리오에서는 충분할 수 있습니다.

IP 주소를 사용하는 경우에도 클라이언트와 서버 사이에 NAT 프록시가있는 경우 해당 프록시를 통해 오는 모든 것이 신뢰할 수 있다는 것을 받아 들여야 할 수도 있습니다. (외부/신뢰할 수없는 클라이언트는 그 프록시).

허용 할 수없는 경우 다른 인증 방법으로 돌아갑니다. 로그온 또는 VPN 연결을 요구하는 대신 영구적 인 쿠키 또는 클라이언트 인증서를 고려하여 내부 클라이언트에만 제공 할 수 있지만 클라이언트에 제공하는 방법이 필요합니다. 일회성 로그온을 기반으로 영구 쿠키를 제공 할 수 있습니다.쿠키는 UserHostName이 도메인 이름보다 추측 할 수없는 쿠키 값을 생성 할 수있는 좋은 방법이 될 수 있다는 점에서 유사한 방식으로 스푸핑 될 수 있습니다.

관련 문제