
1. 브라우저 핑거프린팅 개요
- 브라우저 핑거프린팅은 스크린 해상도, 시간대, 기기 모델 등 다양한 정보를 조합해 고유 식별값을 생성
- 쿠키와 달리 사용자가 쉽게 삭제하거나 차단하기 어려움
- 도메인과 무관하게 연산 가능해 추적 차단에도 계속 추적될 수 있음
- 관련 링크
2. 핑거프린팅이 수집하는 주요 항목
- navigator 관련 정보: navigator.plugins, navigator.languages, navigator.webdriver 등
- 렌더링/그래픽 정보: canvas / WebGL 컨텍스트 정보, WEBGL_debug_renderer_info로 추출 가능한 GPU 정보
- 환경 정보: 화면 해상도, 시간대, 브라우저 버전, 사용자 언어 등
3. navigator.webdriver와 자동화 브라우저 감지
- navigator.webdriver
- WebDriver 세션이 활성화되면 true로 설정되는 경우가 많음
- 일반 사용자 환경에서는 보통 false 또는 undefined
- 자동화 탐지 포인트
- navigator.webdriver 가 true인 브라우저는 자동화 툴(예: Selenium)로 판정될 가능성 높음
- navigator.plugins 가 비정상적으로 빈 배열인 경우 의심 포인트
- navigator.languages 가 비정상적이거나 비어있는 경우 의심 포인트
4. Canvas / WebGL 기반 식별법
- document.createElement('canvas').getContext('webgl') 또는 'experimental-webgl'로 컨텍스트 생성 후 렌더링 결과와 파라미터 수집
- WEBGL_debug_render_info를 통해 GPU 제조사·모델 등 추가 정보 확인 가능
- 이 방식은 브라우저와 하드웨어 조합에 따른 미세한 차이를 식별하는 데 효과적임
5. 서버측(백엔드) 봇 탐지 코드 포인트 (PHP 예시)
- Null 병합 연산자
?? (PHP 7+)
$ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown'
- 왼쪽 값이 존재하고 null이 아니면 해당 값 사용, 아니면 대체값 사용
stripos()
- 대소문자 구분 없이 문자열 검색 시 사용
- SQL injection 필터 우회 방지용 문자열 검사 시 유용
- 삼항 연산자
(조건) ? 참 : 거짓
- 예:
$message = ($age >= 18) ? '성인입니다' : '미성년자입니다'
- 예제 목적: 간단한 detect_selenium.php 구현에서 위 문법들을 조합해 봇 여부 판단 로직 구성 가능
6. 봇 탐지시 체크리스트
- HTTP 헤더·User-Agent 패턴 이상 여부 확인
- navigator 기반 값들(plugins, languages, webdriver)과 Canvas/WebGL 지문 비교
- 요청 빈도, 행동 패턴(세션 지속시간, 페이지 전환 속도) 분석
- IP·Geo 정보 및 프록시/데이터센터 IP 여부 확인
- 의심 세션을 EventBridge나 로그로 내보내어 SIEM에서 상관분석 수행
7. 실습·테스트 도구 및 참고 리소스
8. 프라이버시·법적 고려사항
- 핑거프린팅은 사용자 동의 없는 추적 문제와 관련해 GDPR, CCPA 등 규제 관점에서 민감할 수 있음
- 사용자의 프라이버시를 존중하는 정책과 옵트아웃 경로 제공 권장