2026년 사이트가 헤드리스 브라우저를 탐지하는 방법: CDP 누출, 일관성 검사, 그리고 실제로 도움이 되는 것

2026년 6월 6일 게시 · 약 11분 소요

당신은 원시 HTTP에서 진짜 브라우저로 옮겨갔습니다. TLS 지문: 진짜 Chrome의 것. IP: 주거용. 그런데도 사이트는 알아챕니다. 2026년, 헤드리스 브라우저 탐지는 navigator.webdriver를 한참 넘어섰습니다 — 현 세대의 검사는 자동화 프로토콜 자체를 탐지하며, 대부분의 "stealth" 플러그인은 어제의 신호를 패치하면서 오늘의 신호를 요란하게 드러냅니다.

이 글은 사이트가 지금 실제로 무엇을 검사하는지를, 대체로 검사하는 순서대로, 그리고 각 계층에서 진짜 도움이 되는 것이 무엇인지 지도화합니다. 이는 JA3/JA4 TLS 지문(네트워크 계층)과 IP 평판 & ASN(주소 계층)으로 탐지 3부작을 완성합니다 — 이것은 브라우저 계층입니다.

Tier 1: 고전들 (해결됨, 하지만 여전히 검사됨)

대상이 Tier 1만 검사한다면, headless=new를 사용한 현대 Playwright는 통과합니다. 진지한 대상은 수년 전에 넘어갔습니다.

Tier 2: CDP 탐지 — 2026년의 주력

Playwright와 Puppeteer는 Chrome DevTools Protocol을 통해 Chrome을 구동하며, CDP는 페이지 JavaScript가 관찰할 수 있는 런타임 부작용을 남깁니다:

// The classic CDP leak: serialization callbacks
const err = new Error();
Object.defineProperty(err, "stack", {
  get() {
    // This getter fires DURING console serialization -
    // which only happens when DevTools/CDP is attached
    window.__cdp_detected = true;
  },
});
console.debug(err);

이것의 변종들 — console 직렬화 중 getter 부작용, Runtime.evaluate의 타이밍 이상, 패치된 네이티브 함수에 대한 toString()의 동작 — 은 모든 상용 안티봇 번들에 들어 있습니다. 결정적인 점: 이것은 헤드리스 모드가 아니라 프로토콜을 탐지합니다. 헤드, stealth 패치, 완벽하게 사람처럼 보이는 Chrome이라도 CDP를 통해 구동되면 여전히 실패합니다.

도움이 되는 것:

Tier 3: 환경 일관성

아티팩트를 넘어, 현대 시스템은 당신 브라우저의 이야기가 내부적으로 일관적인지를 검사합니다:

검사봇 단서
Canvas / WebGL 렌더 해시SwiftShader/llvmpipe 소프트웨어 렌더링 = 서버 GPU; 또는 1만 명의 "서로 다른 사용자"가 공유하는 해시
폰트 & 코덱Windows User-Agent 아래의 Linux 서버 폰트 세트
타임존 × 로케일 × IP geoIntl은 UTC, IP는 텍사스, Accept-Language는 de-DE
화면 지표작업 표시줄 없는 1920×1080, devicePixelRatio 정확히 1, 창 크기 조정 안 됨
하드웨어 동시성 / 메모리휴대폰이라 주장하는 페이지에 96코어 보고
행동 미세 신호마우스 엔트로피 없음, 즉각적 폼 입력, 동일한 100px 단위 스크롤

여기서 DIY stealth는 죽습니다: 적용하는 모든 패치는 다른 모든 신호와 일치해야 합니다. Linux 컨테이너 위의 위조된 Windows UA는 폰트, GPU 문자열, TCP 지문을 동시에 모순시킵니다. 일관성이 완벽함을 이깁니다 — 정직한 헤드 Linux Chrome이 엉성하게 위조된 "Windows"보다 점수가 높습니다.

그리고 아래 계층도 여전히 적용된다

주소 계층이 불타버렸다면 이 모든 것은 무의미합니다: 데이터센터 ASN 위의 흠 없는 브라우저는 여전히 "데이터센터 속의 흠 없는 브라우저"입니다 — 그리고 헤드리스 탐지 임계값은 IP 평판에 적응적입니다. 같은 브라우저가 플래그된 IP에서는 더 많은 JavaScript 챌린지를 받습니다. 주거용 exit은 브라우저 계층이 살아남아야 할 정밀 검사를 효과적으로 낮춰줍니다:

browser = p.chromium.launch(
    headless=False,                      # headed survives more checks
    args=["--disable-blink-features=AutomationControlled"],
    proxy={
        "server": "us.jibaoproxy.com:913",
        "username": "USERNAME", "password": "PASSWORD",
    },
)

실전 체크리스트

  1. 새 헤드리스 또는 헤드 모드를 사용하세요. 레거시 헤드리스는 절대 쓰지 마세요.
  2. 진지한 대상에는 CDP 탐지를 가정하세요 — 패치된 런타임, 비-CDP 드라이버, 또는 강화된 비-Chromium 엔진.
  3. stealth 플러그인을 무작정 쌓지 마세요. 패치되지 않은 각 toString()은 그 자체로 신호입니다. 더 적고 일관된 패치가 이깁니다.
  4. 전체 이야기를 맞추세요: 타임존 = IP geo = 로케일; 주장하는 OS에 GPU가 그럴듯하게.
  5. 입력 엔트로피를 추가하세요 — 곡선형 마우스 경로, 가변 지연, 가끔의 스크롤백.
  6. 실제 대상 전에 중립적 관찰자를 상대로 테스트하세요.
Free tool · no signup

단 한 번의 페이지 로드로 자동화 스택을 감사하세요

우리의 Fingerprint & Leak Test는 webdriver 플래그, CDP 아티팩트, canvas/WebGL 해시, 타임존 대 IP 모순, 그리고 안티봇 벤더가 실행하는 일관성 검사를 보고합니다 — 당신이 가리키는 어떤 브라우저든 상대로.

내 브라우저 지문 테스트 →

브라우저는 깨끗한데 IP가 당신을 들통나게 하나요? 주거용 exit과 짝지으세요 — 무료 트래픽 500MB →

요약

브라우저에 믿을 만한 주소를 주세요

당신의 지문이 들려주는 이야기와 일치하는 주거용 IP — 무료 트래픽 500MB, 카드 불필요.

무료 체험 시작

모든 IP 제품 · 언제든 이용 가능한 방대한 노드 풀

지금 가입하고 충전 금액의 최대 100%를 돌려받으세요

신규 사용자는 가입 시 500MB를 받고, 첫 충전 시 추가 보너스를 받습니다. 기간 한정 혜택입니다.