용어집

브라우저 핑거프린팅이란 무엇인가요?

브라우저 핑거프린팅은 웹사이트가 브라우저에서 일련의 속성(User-Agent, 화면 크기, 글꼴, 플러그인, 캔버스 해시, WebGL 서명 등)을 수집해 하나의 고유한 서명으로 결합함으로써 방문자를 식별하고 추적하는 기법입니다.

최신 핑거프린팅이 수집하는 신호가 무엇인지, 왜 '새로운 IP' 하나만으로는 사람처럼 보이기에 충분하지 않은지, 그리고 스크래퍼의 지문을 깨끗하게 유지하는 방법을 이해합니다.

설명

브라우저 핑거프린팅은 브라우저에서 다양한 속성을 수집해 안정적인 식별자로 변환합니다. 쿠키가 없어도 User-Agent, 언어, 시간대, 화면 해상도, 설치된 글꼴, 캔버스 렌더링 해시, WebGL 렌더러 문자열, 오디오 컨텍스트 핑거프린트를 비롯한 수십 가지 신호의 조합만으로도 세션 간에 단일 브라우저를 놀라울 정도로 정확하게 식별할 수 있습니다.

크게 나누면 수동 핑거프린팅과 능동 핑거프린팅 두 가지 범주가 있습니다. 수동 핑거프린팅은 브라우저가 암묵적으로 노출하는 속성, 즉 User-Agent, Accept-Language, sec-ch-ua 클라이언트 힌트를 읽습니다. 능동 핑거프린팅은 브라우저의 렌더링 엔진, 오디오 엔진, GPU, 타이밍 특성을 탐지하는 JavaScript를 실행한 뒤 해시를 계산합니다.

스크래핑과 자동화에서 핑거프린팅이 중요한 이유는 IP 로테이션만으로는 충분하지 않기 때문입니다. 10,000개의 레지덴셜 IP를 로테이션하더라도 모든 요청이 동일한 캔버스 핑거프린트와 동일한 Playwright 기본 User-Agent를 사용한다면, 대상 사이트는 10,000개의 요청을 모두 동일한 스크래퍼 인스턴스로 연관 지을 수 있습니다. Cloudflare, Akamai, PerimeterX, Datadome 같은 현대적인 안티봇 시스템은 모두 IP 분석과 함께 핑거프린팅을 적극적으로 활용합니다.

작동 방식

브라우저가 핑거프린팅 코드가 포함된 페이지를 로드하면, 스크립트는 브라우저 속성(UA, 언어, 플러그인, 화면, 시간대)을 열거하고, 특정 텍스트와 그라디언트로 숨겨진 캔버스를 그린 다음 렌더링된 픽셀을 읽어들이며(캔버스 핑거프린트), WebGL 컨텍스트를 생성하여 GPU 벤더 및 렌더러 문자열을 읽고(WebGL 핑거프린트), 오디오 API로 톤을 생성하여 스펙트럼을 읽으며(오디오 핑거프린트), 하드웨어 신호를 위해 특정 연산(math.tan, performance.now 드리프트)의 시간을 측정합니다.

이 모든 값은 해시되어 핑거프린트 ID로 만들어지고 서버로 다시 전송됩니다. 이러한 속성 중 단 열두 개만 조합해도 매우 고유하기 때문에, 결과 ID는 쿠키 삭제, 새 세션, 다른 IP에서도 안정적으로 브라우저를 식별합니다.

타입

패시브 핑거프린팅

브라우저가 HTTP 헤더와 JavaScript 전역 변수를 통해 암묵적으로 노출하는 속성을 읽습니다: User-Agent, Accept-Language, sec-ch-ua 힌트, 화면 크기, 시간대, 언어. 비용이 저렴하며 어디서나 실행됩니다.

액티브 / 캔버스 핑거프린팅

숨겨진 캔버스에 그림을 그리고 픽셀 해시를 읽어오는 JavaScript를 실행합니다. GPU/드라이버 조합이 다르면 렌더링이 미묘하게 달라져 캔버스 핑거프린트가 기기별로 매우 안정적입니다.

WebGL 핑거프린팅

WebGL 컨텍스트를 탐색하여 GPU 벤더, 렌더러 문자열, 지원되는 확장 기능을 확인합니다. 헤드리스 브라우저와 가상화된 GPU는 종종 특징적인 시그니처를 생성합니다.

오디오 핑거프린팅

AudioContext API로 오디오 파형을 생성하고 결과 주파수 스펙트럼을 읽어옵니다. 오디오 처리는 운영체제와 오디오 드라이버에 따라 미묘하게 다르게 나타나며, 기기별로 안정적인 해시를 생성합니다.

TLS / 네트워크 핑거프린팅 (JA3, JA4)

TLS 핸드셰이크 자체를 핑거프린팅합니다. 암호 목록, 확장, ALPN 순서, GREASE 값까지. 애플리케이션 계층에 도달하기도 전에 기반 HTTP 클라이언트(curl, Python requests, Playwright 등)를 식별합니다.

일반적인 사용 사례

로그인, 회원가입, 폼 페이지에서의 봇 방어
계정 중복 제거(하나의 핑거프린트 = 한 명의 사용자)
금융 및 광고 구매 흐름에 대한 사기 스코어링
쿠키 없이 재방문자 추적하기
애플리케이션 계층에서의 스크래퍼 탐지
자주 묻는 질문

자주 묻는 질문

다음에 대한 일반적인 질문 브라우저 핑거프린팅.

안티봇 시스템은 IP만이 아니라 브라우저를 핑거프린팅하기 때문입니다. 10,000개의 IP에서 10,000개의 요청이 오더라도 모두 동일한 캔버스 핑거프린트, 동일한 TLS JA3, 동일한 User-Agent를 가지고 있다면, 시스템은 이를 하나의 스크래퍼로 연관시킬 수 있습니다. 많은 개별 사용자처럼 보이려면 IP 로테이션과 핑거프린트 위생 관리가 모두 필요합니다.

기본적으로는 그렇습니다. 기본 Playwright/Puppeteer 브라우저는 (navigator.webdriver=true, 특정 플러그인 목록, chrome-app 객체 누락 등) 뚜렷한 신호를 가지고 있어 안티봇 업체들이 쉽게 감지합니다. 이를 가리고 실제 사용자 핑거프린트와 일치시키려면 스텔스 플러그인이나 커스텀 실행 프로필을 사용하세요.

실제 사용자 핑거프린트를 최대한 가깝게 일치시키세요: 최신 Chrome User-Agent와 일치하는 sec-ch-ua 헤더, 현실적인 화면 크기, 프록시 지역과 일치하는 시간대, 실제처럼 보이는 canvas/WebGL/audio(또는 이를 무작위화하는 스텔스 라이브러리 사용), 그리고 Chrome과 유사한 핸드셰이크를 생성하는 TLS 클라이언트가 필요합니다. 이 모든 것을 레지덴셜 프록시와 결합하면 스크래퍼로서 핑거프린팅되기 어려워집니다.

Canvas 및 WebGL 지문은 기기별로 가장 안정적입니다. TLS 핸드셰이크(JA3/JA4)는 HTTP 클라이언트별로 가장 안정적입니다. canvas + TLS + User-Agent의 조합만으로도 대부분의 스크래퍼 설정을 고유하게 식별하기에 충분하며, 이것이 안티봇 공급업체가 세 가지를 모두 결합하는 이유입니다.

예, 제한적으로 가능합니다. puppeteer-extra-plugin-stealth, undetected-chromedriver, BrowserScan 스타일의 랜덤화 도구들은 canvas, WebGL, 오디오 및 기타 능동적 신호를 위장합니다. 문제는 일관성입니다. 요청마다 지문이 무작위로 변경되지만 쿠키/세션이 요청 간에 유지된다면, 그 불일치 자체가 하나의 지문이 됩니다.

모바일 IP 자체는 높은 신뢰도(CGNAT)를 가집니다. 브라우저 핑거프린트는 IP 유형과 무관합니다. 데스크톱 User-Agent를 사용하는 모바일 프록시는 여전히 불일치로 감지될 수 있습니다. 모바일 스크래핑의 경우, 모바일 프록시를 실제 모바일 브라우저 핑거프린트(모바일 UA, 모바일 sec-ch-ua-mobile=?1, 모바일 화면 크기)와 함께 사용하세요.