2011-01-26 5 views
4

저는 ASP.net (C#) 페이지 "doSomething.ashx"에 XMLHTTP 요청을하는 고전적인 ASP 페이지가 있습니다. 둘 다 동일한 서버에서 호스팅됩니다.보증 요청은 로컬 서버에서 왔습니다.

악성 사용자가 doSomething.ashx 페이지를 방문하여 잘못된 요청을하는 것을 방지하려면 요청을 로컬 서버에서 수신하도록 어떻게 보장 할 수 있습니까?

편집 :

HttpContext.Current.Request.IsLocal 

일이 단지뿐만 아니라 : 것

제가 + PW를 통해 이름을 통과 할 수 잊었 바보,하지만? 아니면 창조적 인 해커가 고통받을 수 있습니까?

+1

당신은 요청에 어떤 인증을 추가하는 생각 적이 있습니까? HTTP를 사용하거나 요청에 uid/pwd 조합을 사용합니까? – Lazarus

+0

Doh 고마워요! 그것은 작동 할 것입니다 –

답변

7
+0

+1. 이것은 누군가가 정말로 당신의 IP 스택을 borks 않는 한 작동합니다. 그것은 localhost에 대해서만 신뢰할 수 있습니다. 127.0.0을 가짜로 만드는 다른 컴퓨터에서 HTTP 요청을하는 방법은 없습니다 (TCP 협상은 실패합니다). – TomTom

+0

이론적으로이 방법으로 인증 할 필요가 없습니까? –

+0

XMLHTTP 요청을하는 경우 클라이언트 브라우저와 사용자 IP를 사용하여 요청을 처리합니다. IP가 로컬이 아니기 때문에이 작업은 실패합니다. 대신 세션 토큰을 사용하십시오. –

1

간단하면 요청을 인증합니다.

+0

HttpContext.Current.Request.IsLocal 작동합니까? –

+0

나는 솔직히 모르지만 나는 그것에 의지하지 않을 것이다. 내 생각 엔 IP 주소를 확인하는 것입니다. 그러나 아마도 그렇게하지 않는 것이 가장 좋습니다. 또는 최소한 실제 인증과 함께 사용해야합니다. 그것은 어쨌든 미래에 당신을 도울 것이며, 당신이 달성하고자하는 것을 설명 할 것입니다. –

2

해당 요청/세션에 고유 한 토큰을 추가해야합니다. 인증 된 것일뿐 세부 사항을 가진 사람이 보낸 것으로 보장 할 수는 있지만 해당 사용자로부터 "위장"될 수 있습니다.

만료시 "알려진"토큰을 모두 선택하거나 세션 기반 시스템을 사용하고 요청 처리기에서 유효한지 확인할 수 있습니다.

토큰 만 사용하는 경우. 요청을 한 페이지를 보낼 때 서버에서 생성해야하며 요청 자체를 처리 할 때 확인해야합니다. 요청이 동일한 시스템에서 오는 경우

context.Request.IsLocal 

이 부울이 참 :

HttpRequest를 객체에서
관련 문제