클라우드 플레어와 구글 애드센스 사이의 ip 확인
2021년 9월 마지막 지식 업데이트를 기준으로 애드센스는 일반적으로 광고 타겟팅, 사기 탐지 등 다양한 목적으로 웹사이트를 방문하는 클라이언트(사용자)의 IP 주소를 확인합니다. 이는 애드센스가 사용자 기기의 IP 주소를 사용하여 관련 광고를 게재하거나 지역 타겟팅을 위한 사용자 위치를 결정한다는 의미입니다.
웹사이트에서 Cloudflare를 사용하는 경우 사용자의 요청은 먼저 Cloudflare 서버를 통과합니다. Cloudflare는 역방향 프록시 역할을 합니다. 즉, 원본 서버(웹 사이트가 호스팅되는 웹 서버)의 실제 IP 주소를 마스킹하고 대신 자체 IP 주소를 사용자에게 제공합니다. 이는 특정 유형의 공격과 트래픽 급증으로부터 원본 서버를 보호하는 데 도움이 됩니다.
그러나 Cloudflare는 일반적으로 "CF-Connecting-IP" 또는 "X-Forwarded-For"와 같은 특수 헤더를 사용하여 사용자의 원래 IP 주소를 원본 서버로 전달합니다. 웹사이트 소유자는 사용자의 원래 IP 주소를 포함하여 이 정보를 캡처하고 사용하도록 서버를 구성할 수 있습니다.
따라서 애드센스가 Cloudflare를 사용하여 웹사이트에 광고를 게재할 때 Cloudflare에서 전달한 헤더를 확인하여 사용자의 IP 주소에 액세스할 수 있어야 합니다. 그러면 애드센스는 광고 타겟팅을 비롯한 다양한 목적으로 이 IP 주소를 사용할 수 있습니다.
기술과 관행은 시간이 지남에 따라 변경될 수 있으며 마지막 지식 업데이트 이후 AdSense와 Cloudflare의 상호 작용 방식이 업데이트되거나 변경되었을 수도 있다는 점을 명심하십시오. IP 주소 및 기타 사용자 데이터를 처리하는 방법에 대한 최신 정보를 얻으려면 공식 문서를 확인하거나 AdSense 및 Cloudflare 지원 팀에 문의하는 것이 좋습니다.
CF-Connecting-IP" 또는 "X-Forwarded-For" 를 확인할 수 있는 php 코드 예제
<?php
// Check for the "CF-Connecting-IP" header
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
$client_ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
}
// If the "CF-Connecting-IP" header is not present, check "X-Forwarded-For" header
elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
// The X-Forwarded-For header can contain a comma-separated list of IP addresses
// The client's IP address is usually the first one in the list
$ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$client_ip = trim($ips[0]);
}
// If neither header is present, use the remote address as a fallback
else {
$client_ip = $_SERVER['REMOTE_ADDR'];
}
// Now, $client_ip contains the client's original IP address
echo "Client's IP Address: " . $client_ip;
?>
먼저 $_SERVER 슈퍼글로벌 배열에 "CF-Connecting-IP" 헤더가 있는지 확인합니다. 그렇다면 클라이언트의 IP 주소를 해당 값으로 설정합니다.
"CF-Connecting-IP" 헤더가 발견되지 않으면 "X-Forwarded-For" 헤더를 확인합니다. 이 헤더에는 쉼표로 구분된 IP 주소 목록이 포함될 수 있으며, 일반적으로 클라이언트의 IP 주소가 목록의 첫 번째 주소가 됩니다. 코드는 이 목록을 분할하고 추가 공백을 제거한 다음 첫 번째 IP 주소를 $client_ip 변수에 할당합니다.
두 헤더 모두 발견되지 않으면 직접 클라이언트(어떤 경우에는 Cloudflare 서버일 수 있음)의 IP 주소를 나타내는 $_SERVER['REMOTE_ADDR'] 값을 사용하게 됩니다.
이러한 헤더를 사용하여 클라이언트의 IP 주소를 결정할 때 IP 주소가 보안에 민감한 작업이나 데이터베이스 관련 작업에 사용될 경우 IP 주소에 대한 적절한 유효성 검사 및 삭제도 수행해야 합니다.
그렇다면 해당 컴퓨터에서 광고가 보여질때의 체크에서도 브라우저상에서 확인되는 ip는
애드센스의 JavaScript 코드를 사용하여 'CF-Connecting-IP' 또는 'X-Forwarded-For' 헤더를 직접 확인할 수는 없습니다. 애드센스는 사용자 웹 브라우저 내 클라이언트 측에서 작동하며 Cloudflare 프록시에서 전송한 것과 같은 HTTP 요청 헤더나 웹사이트의 서버 측 관련 헤더에 액세스할 수 없습니다.
"CF-Connecting-IP" 및 "X-Forwarded-For" 헤더는 웹 서버로 전송된 HTTP 요청의 일부이며 서버 측에서 처리됩니다. 애드센스의 JavaScript를 포함한 JavaScript는 서버가 요청을 처리하고 응답을 보낸 후 클라이언트측에서 작동합니다.
JavaScript 코드 내에서 특정 목적을 위해 클라이언트의 원래 IP 주소에 액세스하거나 이를 사용해야 하는 경우 일반적으로 서버측 코드(예: PHP, Node.js, Python)가 이러한 헤더에서 IP 주소를 추출하도록 해야 합니다. 이를 변수로 또는 HTML 응답 내에서 JavaScript 코드에 전달합니다.
예를 들어, 서버측 코드가 HTML 응답 내의 자바스크립트 변수에 클라이언트의 IP 주소를 포함하도록 하면 애드센스 자바스크립트 코드가 이에 액세스할 수 있습니다. 다음은 간단한 예입니다.
위의 예에서 <?php echo $clientIP; ?>는 "CF-Connecting-IP" 또는 "X-Forwarded-For" 헤더에서 클라이언트의 IP 주소를 검색하기 위해 실제 코드를 삽입하는 위치 표시자입니다.
이런 경우 해당 컴퓨터에서 뜨는 광고들은 해당컴퓨터의 정보를 갖고 있는것이고 클릭 후 이동 된 광고는
해당 클라우드플레어가 아닌 실제 ip를 저장하는거 같네요.
결국 클플을 통해서 개인 사이트와 다르게 구글에서는 클플을 통과한 실제 ip를 파악 가능하다고 봄.