2009-07-22 2 views
0

나는 asp.net 웹 사이트에서 간단한 인증을 구현하고있다. 기본 폼 인증 사용은 거의 완벽합니다. auth 모드를 Forms로 설정하고 web.config에 간단한 자격 증명 섹션을 설정하고 FormsAuthentication.Authenticate() 및 FormsAuthentication.RedirectFromLoginPage()를 사용하는 간단한 로그인 aspx 페이지를 사용합니다.ASP.NET 폼 인증을 사용하는 IP 확인

그러나 특정 클라이언트 IP 주소에 대한 추가 검사를 추가하고 싶습니다. 특정 IP 주소에서 요청이 오면 자동으로 요청을 승인하고 해당 요청을 로그인 페이지로 리디렉션하지 않습니다. 내장 양식 AuthenticateRequest를 확장하거나 재정의하는 쉬운 방법이 있습니까? 내 다른 옵션은이 작업을 수행하기 위해 자체 HttpModule을 만드는 것이지만 FormsAuthentication 메서드의 멋진 기능과 자격 증명 섹션과의 상호 작용을 잃어 버리면 나빠질 것 같습니다. 어떤 제안?

답변

4

먼저 을 원하십니까? IP 스푸핑은 사용자가 확인하지 못했던 IP 주소의 범위를 추측 할 수 있다면 사이트를 공격하는 이상적인 방법입니다! 그들이 주소의 범위를 알았다고 할지라도 이것은 무차별 공격을 사소한 것으로 만듭니다.

둘째, 로그인 페이지에서 IP 주소를 확인하고 거기에서 리디렉션 할 수 있습니다. HttpModule이 필요 없습니다. 하지만, 다시 한 번, 내가 너라면이 일을하지 않을 것이다.

업데이트 : R G - 몇 가지. 내 생각은 당신이 리디렉션하기 전에 Authenticate() 호출을 할 것이라고했다. 이렇게하면 리디렉션 루프가 다시 발생하지 않습니다. 하지만 당신도 그걸 필요로하지 않는 것 같습니다 ...

둘째, 귀하의 의견 (벤의 게시물에서), 당신은 웹 서비스 에서이 코드를 사용하게 될거야. 그렇다면 웹 서비스를 허용 된 액세스 페이지로 Web.Config 페이지에 넣을 수 없습니까? 그냥이 추가

<location path="YourWebService.asmx"> 
    <system.web> 
    <authorization> 
     <allow users="*" /> 
    </authorization> 
    </system.web> 
</location> 

이것은 우리가 우리가 웹 서비스 요청을 처리 할 수 ​​있습니다 전에 우리의 웹 서비스의 사용자가 (그것은 또한 SSL은 암호화)는 "마법의 문구는"함께 보낼 것을 요구 않지만 우리가하는 일입니다 .

+0

+1이 아니라 대문자가 아닌 경우 – Jason

+0

IP는 하나만의 추가 검사가 아닙니다. –

+0

물론이 경우 앱이 IP 스푸핑에 노출 될 수 있습니다.이 경우에는 문제가되지 않습니다. 로그인은 단순한 방어벽 일 뿐이지 만 누군가가 스푸핑 문제를 해결하기를 원한다면 우리는 신경 쓰지 않아도됩니다. 로그인 페이지에서 리디렉션하는 것에 대해 문제가 해결되지 않고 리디렉션이 다시 인증되거나 로그인 페이지로 리디렉션됩니다. 리디렉션 전에 요청을 먼저 확인할 수 있어야합니다. 로그인이 발생합니다. –

0

나는 Mark에 동의합니다.

<system.web> 
    ... 
    <authentication mode="Forms"> 
     <forms timeout="50000000" /> 
    </authentication> 
    ... 
</system.web> 
: 당신은 클라이언트가 첫 번째 (제대로) 자격 증명을 확인 후 사이트에 접속하는 것이 매우 쉽게하려는 경우

, 당신은 그 (것)들에게 수정의 Web.config에 의해 본질적으로 영원한 영구 쿠키를 제공 할 수 있습니다

createPersistentCookietrue로 설정하여 RedirectFromLoginPage()를 호출하십시오..

수정 됨주의 사항 :이 작업을 수행하거나 지속 시간이 일정한 쿠키를 제공하면 사용자가 일부 종류의 확인란을 사용하여 영구 쿠키를 거부 할 수있는 옵션을 제공합니다. (역으로 작동하면 가장 좋으며 "이 컴퓨터에서 나를 기억하기 위해 클릭하십시오"또는 이와 비슷한 제목의 영구 쿠키를 얻으려면 확인해야합니다.)

+0

이 방법은 항상 작동하지 않습니다 ... 일부 machine.configs가 기본값 인 30 번을 덮어 씁니다. 믿어주세요. 쿠키를 얻으려고 노력했습니다.이 어리 석음을 발견했습니다. – Jason

+0

예 - 공유 함 호스팅 환경에 문제가있을 수 있습니다. 그러나 웹 서버를 제어한다면 괜찮습니다. –

+0

여기 내가 IP 확인을 고집하는 이유는 로그인 프로세스를 거치지 않고 초기 문제를 초기 문제로 언급했을 것입니다. 웹 사이트에서 처리해야하는 웹 서비스 호출이 몇 가지 있습니다 (일반 사용자 페이지 요청과 함께). 이러한 웹 서비스 호출은 특정 IP 범위에서 수행됩니다. 인증없이 처리해야합니다. 그래서 제 질문은 : 폼 인증에서 특정 웹 서비스 URL을 어떻게 든 제외시킬 수 있습니까? 아니면 양식 인증에서 특정 IP를 제외시킬 수 있습니까? –

0

REMOTE_ADDR 서버 변수는 요청자의 IP 주소와 허용 된 주소 목록을 다시 확인할 수 있습니다. 즉 당신을위한 옵션이 있는지

http://msdn.microsoft.com/en-us/library/ms524602.aspx

또한, 만 IIS 관리 콘솔에서 특정 IP 주소를 허용하고 코드를 포기하도록 IIS를 구성 할 수 있습니다.

+1

_an_ 주소를 제공합니다. 요청자의 주소 일 수도 있고 아닐 수도 있습니다. –

+0

오른쪽, 프록시 및 NAT가 실제 주소를 숨길 수 있습니다. –

관련 문제