파서가 작동 중입니다. HTTP 200이 연속적으로 흐르고, 프록시는 살아 있으며, CAPTCHA는 나타나지 않고, 링크 대기열이 증가하고 있습니다. 그러나 일주일 후, 수집된 가격의 절반이 허구라는 것이 밝혀지고, 기가바이트의 트래픽이 실제 사이트에 존재하지 않는 페이지로 소모되었습니다. 이는 파서의 고장도 아니고 나쁜 IP 풀도 아닙니다. 이것은 새로운 보호 모드입니다: 사이트가 당신을 차단하지 않고, 오히려 당신을 먹여주고 있습니다.
1년 반 동안, 안티봇 보호 산업은 조용히 목표를 변경했습니다. 차단은 비싸고 눈에 띄는 조치입니다: 스크래퍼는 403을 보고, 지문을 수정하고, 서브넷을 변경하여 돌아옵니다. 그보다는 그가 작업하는 것을 방해하지 않고, 그의 작업을 무의미하게 만드는 것이 훨씬 더 이익입니다. 아래는 이미 수백만 개의 사이트에서 작동 중인 세 가지 메커니즘과, 당신의 쪽에서 이를 잡아내는 검사 세트입니다.
첫 번째 메커니즘: 차단 대신 타르핏
타르핏(tarpit, "타르 구덩이")은 무한한 사이트 생성기입니다. 크롤러는 수십 개의 링크가 포함된 유효한 HTML 페이지를 받고, 각 링크는 동일하게 생성된 페이지로 연결되며, 탐색 대기열은 결코 비어 있지 않습니다.
가장 잘 알려진 오픈 소스 도구는 Nepenthes입니다. 그의 설정은 의도를 잘 보여줍니다: 기본적으로 서버는 10초에서 65초 동안 응답을 유지하며, 마르코프의 잡담으로 생성된 텍스트를 제공하고, 이를 결정론적으로 수행합니다 — 동일한 URL은 항상 동일한 쓰레기를 반환하여 페이지가 일반적인 정적 파일처럼 보이게 하고, 함정처럼 보이지 않게 합니다. 데이터는 작은 조각으로 제공되어 클라이언트의 타임아웃을 소모합니다. 저자는 한 시간 작업의 측정을 제시합니다: 1850명의 다양한 클라이언트, 10,015개의 요청 및 총 지연 시간 56,020초 — 약 15시간의 타인의 기계 시간이 낭비되었습니다.
Iocaine은 다르게 작동합니다: 그는 실제 사이트 앞에서 역방향 프록시로 작동하며, 첫 번째 가로채기에서 봇에게 고유한 "독이 든" 링크를 제공하고, 그 링크를 통해 돌아올 때 이를 인식하며, 텍스트는 마르코프 체인으로 생성됩니다 — 이 텍스트가 학습 샘플에 포함될 것이라는 계산입니다.
Cloudflare는 동일한 기법을 제품화했습니다 — AI Labyrinth, 2025년 3월에 발표되었습니다. 미끼 페이지는 즉석에서 생성되지 않습니다: Workers AI에서 사전 생성 파이프라인을 사용하며, 결과는 R2에 저장되어 빠르게 배포됩니다. 미로에 대한 링크는 HTML 변환을 통해 일반 페이지에 삽입되며, 미끼 페이지 자체에는 색인 생성을 방지하는 메타 지시어가 있어 검색 결과에 피해를 주지 않도록 합니다. 여기서 중요한 것은 봇이 소모한 시간이 아니라 신호입니다: 사람에게 숨겨진 링크를 통해 nofollow로 표시된 링크는 오직 자동화된 시스템만이 접근할 수 있으며, 그러한 미로에서 세 단계 깊이로 이동하는 것 자체가 나쁜 봇의 지문이 됩니다. Cloudflare는 이를 위해 하루에 500억 건 이상의 AI 크롤러 요청 — 전체 인터넷 트래픽의 1% 미만으로 평가합니다.
타르핏이 로그에서 어떻게 보이는가
특징적인 모습: 수천 개의 URL에 대한 대기열이 계속 증가하고, 응답 시간은 항상 1.5초 이상으로 안정적으로 유지되며, HTTP 코드는 전부 200이며, 추출된 유효 레코드는 0입니다. 403도 없고, CAPTCHA도 없으며, 어떤 출구도 없습니다: 얼마나 많은 페이지가 탐색되었든, 새로운 링크가 오래된 링크보다 더 빨리 나타납니다.
두 번째 메커니즘: AI 에이전트를 위한 독이 든 콘텐츠
첫 번째 메커니즘이 자원을 소모한다면, 두 번째는 결과에 타격을 줍니다. 연구자 Minghao Luo와 Liang Chen은 2026년 6월에 FORGE(Generative Environments에서의 가짜 온라인 추천) 시뮬레이터를 사용한 연구를 발표했습니다: 그들은 12개의 주요 언어 모델을 15개 카테고리의 225개 제품에서 테스트했습니다 — 의류에서 전자제품까지. 공격 메커니즘은 간단합니다: 페이지의 텍스트에서 실제 브랜드가 허구의 브랜드로 대체됩니다.
결과는 하나의 위조된 페이지가 27%의 경우에 어시스턴트가 존재하지 않는 브랜드를 추천하게 하며, 상위 세 개의 검색 결과를 모두 대체하면 이 비율이 73.8%로 증가합니다. 모델은 단순히 가짜 이름을 반복하는 것이 아니라, 그에 대한 장점을 창작하며, 커뮤니티에서의 인기까지 포함합니다. 제안된 세 가지 방어(회의적 프로프트, 모델의 내부 지식에 대한 합의, 문서 간의 검증)는 작동하지 않거나 새로운 문제를 발생시켰습니다. 저자들의 결론: 검증은 수집 단계에서 이루어져야 하며, 추론 단계에서가 아닙니다.
세 번째 메커니즘은 그림을 완성합니다. "A Whole New World: Creating a Parallel-Poisoned Web Only AI-Agents Can See" (Shaked Zychlinski)라는 작업에서는 AI 에이전트를 겨냥한 클로킹이 설명됩니다: 사이트는 브라우저의 속성, 자동화 프레임워크의 서명 및 네트워크 특성을 통해 에이전트를 인식하고, 다른 버전의 페이지를 제공합니다 — 숨겨진 지침과 변경된 사실이 포함되어 있습니다. 동일한 URL을 연 사람은 정상적인 페이지를 보게 되므로, "나는 들어갔고, 모든 것이 괜찮다"는 수동 검증은 아무것도 증명하지 않습니다.
왜 이것이 주로 예산 문제인가
타르핏은 각 페이지가 사이트에겐 저렴하고, 당신에겐 비싸도록 설계되었습니다. 트래픽이 기가바이트 단위로 청구될 때, 무한 페이지 생성기는 당신의 비용을 계산하는 계기가 됩니다: 당신은 결코 데이터베이스의 한 줄이 되지 않을 마르코프 텍스트의 메가바이트에 대해 지불합니다. 실패한 요청과 동일한 산술입니다 — 기가바이트당 가격은 결과의 비용에 대해 아무것도 말하지 않으며, 당신이 하나의 성공적인 기록의 비용을 계산하지 않는 한 그렇습니다.
따라서 첫 번째 실용 규칙은: 트래픽 한도는 도메인과 작업 수준에서 설정되어야 하며, 계정 수준에서만 설정되어서는 안 됩니다. 1기가바이트 이상을 소비하고 단 하나의 레코드도 반환하지 않은 도메인은 자동으로 중지되어야 합니다 — 그렇지 않으면 하나의 함정이 하룻밤 사이에 일일 예산을 소모할 수 있습니다.
쓰레기를 잡아내는 일곱 가지 검사
- 응답 코드가 아니라 수익을 계산하세요. 주요 메트릭은 유효한 레코드를 가진 요청의 비율입니다. 200 비율을 보는 동안, 타르핏은 완벽하게 건강한 소스로 보입니다.
- 카나리아 URL. N 요청마다 도메인 내에서 존재하지 않는 주소를 요청하세요 — 임의의 경로 세그먼트를 사용하여. 정상적인 사이트는 404 또는 리디렉션으로 응답하고, 생성기는 텍스트와 링크가 포함된 완전한 페이지를 제공합니다. 이것은 가장 저렴하고 가장 신뢰할 수 있는 검사입니다.
- 다른 IP 프로필로 교차 검증. 동일한 URL을 두 가지 다른 경로로 가져와서 — 예를 들어, 주거용 IP와 모바일를 통해 — 주요 필드의 해시를 비교하세요: 가격, 이름, 재고. 동일한 URL과 비슷한 요청 시간에서의 불일치는 다른 버전의 페이지가 표시되고 있으며, 그 중 최소한 하나는 사람을 위해 설계되지 않았음을 의미합니다.
- 보이지 않는 링크를 따라가지 마세요. nofollow, 크기가 0인 링크,
display:none또는 화면 밖으로 이동된 링크는 미끼이며, 이를 클릭하는 것이 바로 봇의 지문입니다. 링크 추출 단계에서 필터링하세요, 이후가 아닙니다. - 응답에 대한 엄격한 한도. 타임아웃뿐만 아니라 최대 본문 크기와 최대 탐색 깊이를 제한하세요. 느린 응답이 작은 조각으로 제공되는 것은 전형적인 구덩이의 징후이며, 느린 서버의 징후가 아닙니다.
- 텍스트의 패턴을 찾으세요. 마르코프 생성은 통계로 자신을 드러냅니다: 의심스럽게 균일한 문단 길이, "다른" 페이지 간의 반복되는 n-그램, 가격, 품목 번호 또는 날짜와 같은 구조적 요소가 없는 수십 개의 외부 링크. 도메인의 인접 페이지 간의 반복되는 샤플을 확인하는 간단한 검사는 이러한 출처를 한 번에 차단합니다.
- 상식적으로 숫자를 검증하세요. 역사적 범위를 벗어난 가격, 당신의 브랜드 데이터베이스에서 단 하나의 일치도 없는 제품, 갑작스러운 품목 변화 — 이는 데이터베이스에 기록되기 전에 검증 규칙이 되어야 하며, 한 달 후 보고서에서가 아닙니다. 특히 데이터가 모델이나 자동 구매 결정에 포함될 경우 더욱 그렇습니다.
이미 수집된 데이터 집합을 어떻게 처리할 것인가
의심이 후에 발생했다면, 날짜가 아니라 출처로 정렬하세요. 레코드를 도메인별로 그룹화하고 세 가지 수치를 살펴보세요: 필수 필드가 없는 페이지의 비율, 페이지당 평균 외부 링크 수, 텍스트 길이의 분산. 함정 도메인은 일반적으로 세 가지 모두에서 즉시 구별됩니다. 그런 다음 다른 IP 프로필에서 논란이 있는 URL을 선택적으로 재검증하세요 — 데이터가 일치하지 않으면 해당 도메인에서 모든 데이터를 다시 수집해야 하며, 필터로 수정해서는 안 됩니다.
모델이 페이지를 탐색하고 스스로 결정을 내리는 에이전트 시나리오에 대한 규칙을 별도로 검토할 필요가 있습니다. 바로 그곳에서 하나의 페이지를 대체하는 것이 최대 효과를 발휘하며, 이상을 감지할 중간 사람이 없는 체인입니다. 최소한의 보험은 두 개의 독립적인 출처에서 사실 확인을 요구하고, 에이전트가 단일 도메인에서 얻은 데이터로 행동하지 못하게 하는 것입니다.
간단히 말해
봇은 이미 트래픽의 점유율에서 사람을 초과했습니다, 그리고 보호는 필터만으로 대응하지 않았습니다: 오늘날 자동에게 그럴듯한 쓰레기를 주는 것이 차단으로 그와 논쟁하는 것보다 저렴합니다. 실질적인 결과는 세 가지입니다. 응답 상태가 아니라 유효한 레코드를 계산하세요. 각 도메인에 대한 카나리아 검사를 유지하고 트래픽 한도를 설정하세요. 논란이 있는 페이지를 서로 다른 IP 프로필에서 비교하세요 — 동일한 페이지의 버전 불일치는 당신에게 특별히 봇을 위해 준비된 인터넷을 보여주고 있다는 증거입니다. 이 스킴에서 프록시는 단 하나의 작업만 해결합니다 — 페이지에 대한 독립적인 두 번째 시각을 제공하며, 나머지는 당신의 쪽에서 검증합니다.
