HTTP 사용X_FORWARDED_FOR 클 라 이언 트 IP 획득 의 심각 한 결과

WEB 개발 에서 우 리 는 클 라 이언 트 의 IP 주 소 를 얻 기 위해 아래 코드 를 사용 하 는 것 에 익숙 할 것 입 니 다.C\#코드
 
// IP
string IP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(IP)) {
// IP IP
IP = Request.ServerVariables["REMOTE_ADDR"];
}
위의 코드 는 보기에 정상 적 인 것 같 습 니 다.안 타 깝 게 도 여기에 위험 이 숨 어 있 습 니 다!!"HTTPX_FORWARDED_FOR"이 값 은 HTTP 헤드 를 가 져 오 는 것 입 니 다"XFORWARDED_FOR"속성 획득.그래서 악의 적 인 파괴 자 에 게 IP 주 소 를 위조 할 수 있 는 방법 을 제공 합 니 다!!다음은 테스트 코드:
 
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/ip.aspx");
request.Headers.Add("X_FORWARDED_FOR", "0.0.0.0");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader stream = new StreamReader(response.GetResponseStream());
string IP = stream.ReadToEnd();
stream.Close();
response.Close();
request = null;
"ip.aspx"파일 코드:
 
Response.Clear();
// IP
string IP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(IP))
{
// IP IP
IP = Request.ServerVariables["REMOTE_ADDR"];
}
Response.Write(IP);
Response.End();
이렇게.테스트 코드 에서 ip.aspx 파일 에 접근 할 때."string IP=stream.ReadToEnd();"이 코드 에서 얻 은 IP 데 이 터 는 바로"0.0.0.0"입 니 다!!!(허.실제 상황 에서 이런 IP 주 소 는 우리 가 원 하 는 결과 가 아 닐 것 입 니 다.일부 투표 시스템 에서 하나의 IP 를 한 번 만 투표 할 수 있 도록 제한 할 때,유사 한 코드 로 상대방 의 IP 를 취득 하고 판단 한다 면.ㅋ ㅋ.제한 은 무효 입 니 다)...혹은 위 코드 로 IP 주 소 를 획득 한 후 데이터 판단 을 하지 않 으 면 데이터 파 괴 를 더 진행 할 수 있 습 니 다!!예 를 들 어 위의 코드 에서 IP 주 소 를 가 져 오 면 바로 이러한 SQL 문구 가 있 습 니 다.string sql="INSERT INTO(IP)VALUE("+IP+")";그러면 파괴 자 는 SQL 주입 을 통 해 데이터 파 괴 를 할 수 있 습 니 다!!그 러 고 보 니"HTTPX_FORWARDED_FOR"이 속성 으로 클 라 이언 트 IP 를 가 져 오 는 방법 은 더 이상 바람 직 하지 않 습 니 다.- -\#그러나 이런 방법 을 사용 하지 않 는 다 면 프 록 시 서버 를 진정 으로 사용 한 사람들 은 더 이상 그들의 실제 IP 주 소 를 얻 을 수 없습니다.(일부 프 록 시 서버 는"X"에 있 기 때 문 입 니 다.FORWARDED_FOR"이 HTTP 헤드 에 사용자 의 진정한 IP 주 소 를 방문 합 니 다).흐.현실 은 이 렇 습 니 다.어떤 것 은 얻 는 것 도 있 고 잃 는 것 도 있 습 니 다.마지막 으로 제 건 의 는 위의 방법 으로 클 라 이언 트 IP 를 얻 지 말 라 는 것 입 니 다.즉,대리 상황 에 신경 쓰 지 말 라 는 것 입 니 다.당신 의 건 의 는 어 떻 습 니까??

좋은 웹페이지 즐겨찾기