- User-Agent 헤더 검증
- Accept 헤더 검증 (text/html, application/json 포함 여부)
- Accept-Language 헤더 검증
- Sec-Fetch-* 헤더 검증
- Content-Type 헤더 검증
- POST 메서드 검증
Step3는 브라우저 통신의 특성을 활용했습니다. 웹 통신 시, 일반적으로 포함되는 헤더 정보의 유무와 적합성을 확인하여 스크래핑과 일반 유저를 구분합니다. 그러나 이 방법은 스크래핑 시 헤더 정보를 무작위로 넣어보낼 경우 방어가 어렵다는 단점이 있습니다.
- 1초 이내 연속 요청 차단
- 1분 내 30회 이상 차단
- 헤더 일관성 검사
- DNT 헤더 검사
- Upgrade-Insecure-Requests 헤더 검사
Step4에서는 스크래핑 시 요청 특성을 분석하여 식별하는 방식을 사용했습니다. 스크래핑의 경우 일반적이지 않은 요청 간격, 연속 요청이 이뤄지는 경우가 많고 요청 패턴의 일관성이 드러나는 경우가 많습니다. 이러한 스크래핑 요청의 고유한 특성을 분석하고 조합하여 스크래핑을 식별해낼 수 있습니다.
- 세션 ID 생성 및 검증
- 클라이언트 토큰 생성 및 검증
- 세션 만료 시간 설정 (30분)
- 요청 횟수 제한 (세션당 100회)
- 요청 간격 검사 (0.5초 이내 연속 요청 차단)
Step5는 비정상적인 요청을 검증하여 스크래핑을 방어합니다. 세션 ID, 토큰과 같은 동적 콘텐츠 검증을 통해 요청의 정당성을 검증하고 세션 만료 시간과 요청 횟수, 간격에 제한을 두어 무차별적인 데이터 수집을 방지하고 스크래핑 패턴을 탐지합니다.
- 숨겨진 폼 필드 검사 (website, email_confirmation, phone_number, timestamp, user_type)
- 숨겨진 경로 접근 검사 (/admin, /wp-login.php, /phpmyadmin, /.env, /config.php)
- 의심스러운 헤더 값 검사 (x-forwarded-for, x-real-ip, cf-connecting-ip)
- 트리거 카운트 기반 봇 판단 (3회 이상 트리거 시 봇으로 간주)
Step6은 스크래핑 요청을 함정으로 유도하는 방식입니다. 일반 유저라면 사용하지 않을 폼, 접근하지 않을 경로를 숨겨놓고 이를 입력할 경우 스크래핑 요청으로 간주합니다. 또 스크래핑 도구들이 많이 사용하는 헤더 값을 확인합니다. 일반 유저 또한 허니팟에 걸릴 수도 있기 때문에 3회 이상 패턴을 보일 경우 스크래핑으로 간주합니다.
- 요청 간격 제한 (1초 이내 연속 요청 차단)
- 시간당 요청 수 제한 (100회)
- 점진적 지연 시간 적용 (1초부터 시작하여 2배씩 증가, 최대 30초)
- 차단 시스템 구현 (5회 이상 연속 빠른 요청 시 5분 차단, 시간당 한도 초과 시 1시간 차단)
Step7은 요청의 빈도와 속도를 검증합니다. 요청이 너무 빠르거나 많으면 스크래핑으로 간주합니다. 일반 사용자는 지연 시간이 길어지면 요청을 그만두는 경우가 많지만(이 때문에 유저 경험을 위한 대비가 무척 중요함) 스크래핑의 경우에는 관계없이 지속적으로 시도합니다. 이러한 특성을 통해 스크래핑 도구를 탐지할 수 있습니다.
- Referer와 Host 헤더를 추가하여 정상적인 브라우저 요청처럼 위장
- 응답 상태 코드 대신 응답 데이터의 status 필드 확인
- 브라우저처럼 보이는 헤더 설정
- Sec-Fetch-* 헤더 추가
- Accept 헤더에 필요한 타입 포함
- 일관된 헤더 설정
- DNT와 Upgrade-Insecure-Requests 헤더 추가
- 요청 간격을 두고 여러 번 시도
- 세션 ID와 토큰 생성 및 관리
- 첫 번째 요청으로 세션 초기화
- 새로운 세션 ID와 토큰으로 두 번째 요청
- 허니팟 필드를 비워두고 요청
- 일반적인 브라우저 헤더 설정
- 요청 간격을 두고 여러 번 시도
- 지연 시간이 포함된 응답 처리
- 429 Too Many Requests 응답 처리
-
다중 계층 방어
- 각 단계별로 다른 보안 기법을 적용하여 한 계층이 뚫려도 다른 계층이 보호할 수 있습니다.
-
정상 사용자 경험 보장
- 정상적인 브라우저 사용자는 보안 기능을 인식하지 못함
-
적응형 보안
- 스크래핑 봇의 행동 패턴에 따라 차단 시간과 지연 시간이 동적으로 조정되며 지속적인 공격 시점에 따라 보안 강도가 자동으로 조절됩니다.
-
우회 난이도
- 각 보안 계층을 우회하기 위해서는 여러 조건을 동시에 만족해야 합니다. 허니팟과 요청 제한을 조합하여 우회 시도 자체를 탐지하였습니다.