$_SERVER["REMOTE_ADDR"]를 사용하여 사용자의 IP 주소를 얻는 것은 일반적으로 많이 사용되는 방법입니다. 하지만 이 방법에는 몇 가지 주의사항과 잠재적인 문제가 있을 수 있습니다.
문제점
1. 프록시 서버 또는 VPN 사용
일반적으로 $_SERVER["REMOTE_ADDR"]는 사용자의 실제 IP 주소를 반환하지만, 사용자가 프록시 서버나 VPN을 사용하는 경우 이 값은 사용자의 실제 IP 주소가 아닌 프록시 서버나 VPN의 IP 주소를 반환할 수 있습니다. 이로 인해 실제 사용자의 위치를 파악하기 어려울 수 있습니다.
2. 로드 밸런서 또는 리버스 프록시
웹 애플리케이션이 로드 밸런서나 리버스 프록시 뒤에 있는 경우 $_SERVER["REMOTE_ADDR"]는 종종 로드 밸런서나 프록시의 IP를 반환합니다. 이 경우 사용자의 실제 IP 주소를 얻으려면 HTTP 헤더에서 X-Forwarded-For를 확인해야 합니다.
3. X-Forwarded-For 헤더 사용
보다 정확한 사용자 IP 주소를 얻기 위해 X-Forwarded-For 헤더를 확인할 수 있습니다. 이 헤더는 프록시를 통과하는 동안의 모든 IP 주소를 포함할 수 있으므로 가장 왼쪽에 있는 IP 주소가 원래 클라이언트의 IP 주소입니다. 그러나 이 헤더는 조작될 수 있으므로 보안에 민감한 용도로 사용하기 전에 신중히 검증해야 합니다.
예제 코드
function getUserIP() {
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if (filter_var($client, FILTER_VALIDATE_IP)) {
$ip = $client;
} elseif (filter_var($forward, FILTER_VALIDATE_IP)) {
$ip = explode(',', $forward)[0];
} else {
$ip = $remote;
}
return $ip;
}
$user_ip = getUserIP();
echo "User IP Address: $user_ip";
이 함수는 다양한 소스에서 IP 주소를 검사하며, 유효한 IP 주소를 찾으면 반환합니다. X-Forwarded-For에서는 주로 첫 번째 IP 주소를 사용하는 것이 일반적입니다.
이러한 접근 방법은 사용자의 실제 IP 주소를 좀 더 정확히 추적하려는 경우 특히 유용합니다. 하지만, 보안 상의 이유로 사용자의 IP 주소를 로그나 데이터베이스에 저장할 때는 항상 주의해야 합니다. 또한 개인정보 보호법을 준수해야 합니다.
'IT > PHP | CI' 카테고리의 다른 글
[PHP] 알면 좋은 배열 함수 array_map, array_filter, array_merge , array_diff, array_column, array_unique (0) | 2025.02.27 |
---|---|
[PHP] 쿼리 반복문 없이 효율적으로 실행시키기 (0) | 2024.08.09 |
[PHP] 객체형 배열 값이 존재하는지 확인하는 법 (0) | 2024.07.23 |
[PHP] 포함된 문자 찾기 str_contains(), str_starts_with(), str_ends_with() 및 strpos() (0) | 2024.06.22 |
[PHP/CodeIgniter] ZOOM API 연동하기 (sever-to-sever OAuth) - 2 (0) | 2023.10.13 |