Skip to main content
모든 브라우저 세션은 User-Agent, 캔버스 그리기 결과, WebGL 렌더러 문자열, 글꼴 목록, 화면 해상도, 설치된 플러그인, 시간대, 언어 헤더, 오디오 컨텍스트 출력 등이 결합된 식별 서명을 노출합니다. 최신 안티봇 시스템은 이러한 신호를 브라우저 핑거프린트로 결합하여 IP 주소보다 더 안정적으로 세션을 식별합니다. 핑거프린트를 관리하지 않는 스크래퍼는 요청할 때마다 탐지 계층에 선명한 신분증을 건네는 셈입니다. 핑거프린트 계층은 행동 아래에 있습니다. 즉, 세션이 무엇을 하는지가 아니라 세션 자체가 무엇인지를 나타냅니다. 강력한 안티봇 시스템에 탐지되지 않으려면 스크래퍼가 깔끔한 핑거프린트와 사람과 유사한 행동이라는 두 계층을 모두 통과해야 합니다.

추적되는 신호

최신 핑거프린트는 일반적으로 다음 신호를 조합합니다.
  • User-Agent 및 Accept 헤더. 가장 명확한 출발점입니다. UA의 HeadlessChrome은 자동화임을 드러냅니다.
  • 캔버스 핑거프린트. 사이트가 브라우저에 숨겨진 캔버스 요소를 렌더링하도록 요청한 뒤 출력을 해시합니다. GPU, 드라이버, OS 조합에 따른 미세한 렌더링 차이가 기기별로 안정적인 서명을 만듭니다.
  • WebGL 핑거프린트. 렌더러 문자열, 공급업체 문자열, 지원 확장 프로그램을 조합하면 GPU와 드라이버 스택을 강력하게 식별할 수 있습니다.
  • 글꼴 목록. 브라우저가 렌더링할 수 있는 글꼴과 그 순서는 세션 하나를 식별할 만큼 고유한 경우가 많습니다.
  • 화면 및 뷰포트. 해상도, 색 농도, 기기 픽셀 비율입니다. 배율이 200%인 1366×768 데스크톱은 2560×1440 Retina 디스플레이와 다른 핑거프린트를 가집니다.
  • 시간대 및 언어. Intl.DateTimeFormatnavigator.languages에서 얻습니다.
  • 오디오 컨텍스트. 오디오 렌더링도 캔버스와 마찬가지로 기기별 핑거프린트가 가능한 출력을 만듭니다.
  • 플러그인, navigator 속성, 하드웨어 동시성. 개별 영향은 작지만 조합 가능한 신호입니다.
  • navigator.webdriver. 관리되지 않은 자동화를 확실하게 드러내는 신호입니다.
수십 개의 작은 신호는 곱셈식으로 결합됩니다. 사이트가 모든 신호에서 고유성을 확보할 필요는 없습니다. 추적할 수 있을 만큼 조합이 고유하면 됩니다.

스크래퍼가 핑거프린트를 유출하는 이유

대표적인 실패 방식은 세 가지입니다.
  • 동일한 기본 ID 반복. 기본 Puppeteer 인스턴스가 10,000개 세션을 실행하면서 같은 캔버스 해시, WebGL 문자열, 글꼴 목록을 제시하면, 서로 다른 10,000명의 “사용자”가 한 기기의 핑거프린트를 공유하게 됩니다. 탐지하기 매우 쉽습니다.
  • 실제 사용자가 만들지 않는 일반 값. 비어 있는 navigator.plugins, 표준 Linux/Chrome 렌더링과 비트 단위까지 같은 캔버스 출력, 일반적인 시스템 글꼴이 빠진 글꼴 목록은 실제 Chrome 사용자에게서 나타나지 않는 이상 징후입니다.
  • 신호 간 불일치. en-USAmerica/New_York을 표방하면서 러시아 IP를 사용하는 경우, iPhone User-Agent와 데스크톱 뷰포트를 함께 쓰는 경우, macOS 전용 글꼴을 포함한 Windows 핑거프린트가 이에 해당합니다. 탐지 계층은 내부 모순을 찾습니다.

핑거프린트 관리

해결책은 각 실패 방식에 직접 대응합니다.
  • 세션별 고유성. 각 작업 인스턴스는 서로 다른 캔버스 해시, WebGL 렌더러, 글꼴 목록 등 고유한 핑거프린트를 제시해야 합니다. 그래야 서로 다른 “사용자”에서 같은 핑거프린트가 반복되지 않습니다.
  • 세션 내 일관성. 하나의 세션 안에서는 핑거프린트가 안정적으로 유지되어야 합니다. 세션 도중에 바뀌는 것 자체가 탐지 신호입니다.
  • IP와 지리적으로 일치. 핑거프린트의 시간대, 언어, Accept-Language 헤더는 프록시 IP의 지역과 일치해야 합니다. 동유럽 IP에는 기본 en-US가 아니라 동유럽 핑거프린트를 연결하세요.
  • 무작위가 아닌 현실적인 값. 순수하게 무작위 값으로 조합한 핑거프린트도 이상 징후입니다. 사람이 사용하지 않는 특이한 값이 아니라 일반적인 GPU 문자열, 그럴듯한 글꼴 목록, 보편적인 화면 크기 등 현실의 핑거프린트 분포에서 선택해야 합니다.
이 원칙을 합하면 런타임 기본값에 의존하는 것과 반대되는 능동적 핑거프린트 관리가 됩니다.

Octoparse의 핑거프린팅 접근 방식

Octoparse는 헤디드 중심 런타임이 헤드리스 도구보다 적은 신호를 노출한다는 본래의 장점에 더해 브라우저 핑거프린트를 능동적으로 관리합니다. 모든 작업에서 동일한 기본 ID를 반복하는 대신 세션마다 고유하고 현실적인 핑거프린트 프로필을 제시하여, 고정 핑거프린트 설정으로는 충족할 수 없는 세션별 고유성 요건을 해결합니다. 사용자가 외부 핑거프린트 서비스를 직접 연결하지 않아도 헤디드 방식에서 오는 “수동적” 스텔스와 핑거프린트 다양성에서 오는 “능동적” 스텔스를 모두 런타임이 처리합니다. 핑거프린트 관리는 Octoparse의 행동 시뮬레이션과 함께 작동합니다. 런타임은 세션마다 서로 다른 실제 사용자처럼 보이고, 페이지에 진입한 뒤에도 실제 사용자처럼 행동합니다.

필요한 상황

능동적 핑거프린트 관리는 정적 사이트와 기본적인 봇 탐지에는 과한 방법일 수 있지만 더 강력한 방어 체계에서는 그 가치를 발휘합니다.
  • 가벼운 방어. 기본 헤디드 방식만으로 대부분 처리할 수 있습니다.
  • 중간 수준의 방어(속도 제한 + 기본 탐지). 다른 계층에 문제가 없다면 기본값으로도 대체로 충분합니다.
  • 강력한 방어(Cloudflare, DataDome, HUMAN, Akamai Bot Manager). 필수입니다. 세션마다 고유하고 현실적인 핑거프린트가 없으면 다른 모든 부분이 자연스러워도 수천 명의 “사용자”에서 같은 ID가 반복되어 스크래퍼가 차단됩니다.
핑거프린트 스텔스를 보완하는 행동 기법은 사람과 유사한 스크래핑을 참조하세요. 핑거프린트 관리로 우회하려는 구체적인 방어 시스템은 CAPTCHA 및 Cloudflare 우회를 참조하세요.