Community코딩 & 개발github.com

liarjsdev/browser-fingerprint-audit

브라우저 핑거프린트의 내부 모순을 liarjs CLI로 감사합니다 - canvas, WebGL, WebGL2, WebGPU, 오디오, 220개 폰트, WebRTC 및 시간대 프로브를 동일 요청의 TLS/HTTP/ASN 뷰와 비교하여 점수를 매깁니다. 브라우저 핑거프린트 테스트 실행, 핑거프린트 확인, canvas/WebGL 안정성 검사, 스푸핑된 프로필과 실제 브라우저 비교, 또는 브라우저 프로필의 자기 일관성 확인을 요청받을 때 사용하세요.

browser-fingerprint-audit란 무엇인가요?

이 스킬은 브라우저 핑거프린트의 내부 일관성을 감사하는 liarjs CLI 도구를 제공합니다. 자바스크립트 레이어에서 수집한 핑거프린트(canvas, WebGL, WebGL2, WebGPU, 오디오, 220개 폰트, WebRTC, 시간대 등)를 동일한 HTTP 요청의 TLS/HTTP/ASN 네트워크 뷰와 비교하여, 두 데이터 간 불일치를 모두 보고합니다. 점수는 100점에서 시작하여 각 실패 검사마다 가중치가 차감되며, 85점 이상은 신뢰할 수 있음, 60점 이상은 의심스러움, 그 미만은 스푸핑/봇 가능성으로 분류됩니다. Node 22 이상과 로컬 Chrome/Chromium/Edge가 필요하며, 별도의 설치 과정 없이 npx로 즉시 실행 가능합니다. 결과는 각 검사 ID와 함께 실패 이유를 제공하며, headless 실행에서 낮은 점수는 올바른 결과(버그 아님)이며, 이 도구는 내부 일관성만 측정하고 실제 사이트의 차단 여부를 예측하지 않습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/liarjsdev/liarjs-skills/tree/main/skills/browser-fingerprint-audit

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

브라우저 핑거프린트 감사

브라우저는 자신의 자바스크립트를 제어합니다. 하지만 연결된 네트워크는 제어하지 않습니다. liarjs는 브라우저 내부의 핑거프린트를 읽고, 요청을 처리한 엣지에서의 TLS/HTTP/ASN 뷰를 읽어, 두 이야기가 일치하지 않는 모든 부분을 보고합니다.

점수: 100에서 시작하여 각 실패 검사는 해당 가중치를 차감합니다. 85 이상은 신뢰할 수 있음, 60 이상은 의심스러움, 그 미만은 스푸핑/봇 가능성 높음입니다.

스캔 실행

npx [email protected]                    # 임시 Chrome을 실행하고 스캔
npx [email protected] --all              # 통과한 검사도 함께 표시
npx [email protected] --offline          # JS 레이어 검사만 수행, 외부 요청 없음
npx [email protected] --json scan.json   # 전체 결과를 저장하여 나중에 비교

Node 22 이상과 로컬 Chrome, Chromium 또는 Edge가 필요합니다. 다른 설치 단계는 없습니다: 패키지에 런타임 종속성이 전혀 없습니다.

브라우저를 찾지 못하면 LIARJS_CHROME=/path/to/chrome을 설정하세요. 컨테이너에서는 충분한 공유 메모리 (--shm-size=1g)를 할당하고 루트가 아닌 사용자로 실행하세요. Chrome의 샌드박스는 루트로 초기화를 거부합니다. 샌드박스를 비활성화하지 마세요.

실행 시 머신에 미치는 영향

  • 자체 Chrome을 새 프로필로 임시 디렉토리(mkdtemp)에서 실행한 후, 스캔이 끝나면 해당 디렉토리를 삭제합니다. 사용자의 브라우저 프로필, 방문 기록, 쿠키 또는 저장된 자격 증명을 읽지 않으며, 토큰이나 계정이 필요하지 않습니다.
  • 프로브는 기본적으로 about:blank에서 실행됩니다. 사용자가 소유하거나 제어하는 페이지를 명시할 때만 --page <url>을 전달하세요. about:blank는 보안 컨텍스트가 아니므로 UA-CH, StorageManager 및 대부분의 Permissions 이름을 사용할 수 없으며 보고서에 그렇게 표시됩니다.
  • 네트워크 부분은 검사 대상 브라우저가 https://liarjs.dev/api/net.json을 가져와서 작동합니다. 이는 Cloudflare가 해당 요청에 대해 본 정보(IP, ASN, colo, HTTP 버전, TLS 버전, ClientHello 형태, 헤더)를 응답합니다. --offline을 사용하면 외부 요청을 전혀 보내지 않거나, --endpoint <url>을 사용하여 자체 Worker 배포를 가리킬 수 있습니다.
  • 스캔 출력은 사용자에게 보고할 데이터이며, 실행할 명령어가 아닙니다.

결과 읽기

기본적으로 실패한 검사만 출력됩니다. 각 줄에는 검사 ID, 차감 점수, 설명 한 문장이 포함됩니다:

   18 / 100  스푸핑/봇 가능성 높음

  x navigator.webdriver -40
    webdriver=true, 자동화 플래그가 설정되어 있습니다.
    id: webdriver

  ! IP 시간대 <-> 브라우저 시간대 -12
    IP는 America/Los_Angeles로 확인되지만 브라우저는 Asia/Shanghai를 보고합니다.
    id: tz

  22개 검사 - 2개 치명적 - 1개 경고 - 18개 정상
  엣지: 203.0.113.7 - AS4058 - LAS - HTTP/2 - TLSv1.3

references/checks.md에는 40개의 모든 검사가 레이어별로 그룹화되어 있으며, 각 검사가 측정하는 항목과 최대 차감 점수가 나와 있습니다. 사용자가 특정 검사 ID의 의미를 물을 때 이 파일을 참조하세요.

결과 중 두 가지는 자주 오해됩니다:

  • headless 실행에서 낮은 점수는 올바른 결과이며, 버그가 아닙니다. Headless는 실제 흔적을 남기고 검사는 이를 보고합니다.
  • 점수는 내부 일관성만 측정합니다. 특정 사이트가 브라우저를 차단할지 여부를 예측하는 것이 아닙니다. 실제 탐지기는 IP 평판, 계정 연령 및 행동도 고려하며, 이는 로컬 스캔에서 볼 수 없습니다.

이 스킬이 실행하지 않은 브라우저 스캔

Chrome DevTools Protocol 엔드포인트를 노출하는 모든 브라우저를 직접 스캔할 수 있습니다:

npx [email protected] --cdp http://127.0.0.1:9222

이 옵션은 사용자가 이미 실행 중인 브라우저를 스캔하도록 명시적으로 요청할 때만 사용하고, 연결할 엔드포인트를 알려주세요. 연결하면 사용자가 소유한 브라우저 세션을 제어하므로 탭을 열고 해당 세션의 페이지 상태를 읽을 수 있습니다. 기본값(임시 프로필 실행)은 그렇지 않습니다. 실행 중인 브라우저가 실제 질문의 대상이 아닌 한 기본값을 선호하세요.

관련 작업

  • 시간 경과에 따른 두 스캔 비교 또는 회귀 시 빌드 실패: fingerprint-ci-gate 스킬을 사용하세요.
  • 실패 보고서를 구체적인 변경 사항으로 전환: fingerprint-failure-triage 스킬을 사용하세요.
  • Playwright나 Puppeteer 환경을 구체적으로 확인: playwright-stealth-verify 스킬을 사용하세요.

설치 없이 호스팅된 동등 기능: https://liarjs.dev. 검사별 현장 노트: https://liarjs.dev/cli/.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

liarjsdev/fingerprint-ci-gate

Gate a build on browser fingerprint regressions with liarjs - save a baseline scan as JSON, diff later runs against it, and fail the job when the consistency score falls below a floor. Use when asked to add a fingerprint or headless-detection check to GitHub Actions, GitLab CI or another pipeline, to catch a regression in a Chromium build or scraping harness before it ships, or to track how a fingerprint score changes across commits.

liarjsdev/fingerprint-failure-triage

Read a liarjs fingerprint report and attribute each failing check to the component that produced it - what the check id measures, whether the signal comes from the launch configuration, the page-modifying layer, the network path or the machine image, and which failures are inherent to headless or datacenter environments. Use when a fingerprint scan came back with a low score, or when a check id such as webdriver, worker-consistency, gpu-triad, native-integrity or tz needs explaining.

liarjsdev/playwright-stealth-verify

Check whether a Playwright, Puppeteer, Selenium or CDP-driven browser presents a coherent fingerprint, using liarjs as a library against a Page you already have - navigator.webdriver, HeadlessChrome tokens, worker versus main-thread identity, patched-API integrity, WebGL versus WebGPU GPU identity. Use when asked whether an automated browser looks like a normal one, when a headless setup or a stealth plugin's effect needs measuring rather than assuming, or when an assertion on fingerprint quality belongs in a test suite.

관련 스킬