2014-11-02 8 views
0

내 웹 페이지에서 순 방문자를 계산하고 싶습니다. 데이터베이스에 삽입하기 전에,클라이언트 IP 주소의 XSS 공격

$ipaddress = ''; 
    if ($_SERVER['HTTP_CLIENT_IP']) 
     $ipaddress = $_SERVER['HTTP_CLIENT_IP']; 
    else if($_SERVER['HTTP_X_FORWARDED_FOR']) 
     $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    else if($_SERVER['HTTP_X_FORWARDED']) 
     $ipaddress = $_SERVER['HTTP_X_FORWARDED']; 
    else if($_SERVER['HTTP_FORWARDED_FOR']) 
     $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; 
    else if($_SERVER['HTTP_FORWARDED']) 
     $ipaddress = $_SERVER['HTTP_FORWARDED']; 
    else if($_SERVER['REMOTE_ADDR']) 
     $ipaddress = $_SERVER['REMOTE_ADDR']; 
    else 
     $ipaddress = 'UNKNOWN'; 
    return $ipaddress; 

내가 그것에 htmlspecialchars() 함수를 호출해야합니다 : 나는 클라이언트의 IP는 다음과 같은 기능을 사용하여 얻을? 헤더를 조작하고 IP 주소를 변경하여 XSS 또는 SQL Injection (이미 real_escape_string() 함수라고 함) 공격을 추가하는 것이 가능하다는 소식을 들었습니다. 당신이 기대하고있는 데이터 유형을 고려

+0

데이터베이스 열에 저장 한 값을 ** HTML로 이스케이프해서는 안됩니다. 텍스트를 연결할 때만 이스케이프해야합니다. 탈출 수단이 무엇인지 이해해야합니다. – SLaks

+0

@SLaks 관리자보기에서이 IP를 표시하고 싶습니다. 그래서 가능하다면 공격의 벡터가 될 수 있습니다. – TN888

+0

HTML에 연결하면 문제가됩니다. 데이터베이스에 저장하는 것은 아닙니다. (비록 당신이 매개 변수를 사용해야한다) – SLaks

답변

1

당신은 단순히 코드에 다음

if(filter_var($ipaddress, FILTER_VALIDATE_IP)) return $ipaddress; 
else return "Unknown"; 

이 기본적으로 실제 IP가 있다고 확인합니다 추가 특정 데이터 유형 에 대해 확인해야합니다,의 IP입니다없고 그래서 SQL Injection 공격 벡터 또는 XSS도 통과 할 수 있습니다.