Quay lại blog

Bạn không bị cấm — bạn bị nhồi nhét rác: tarpit và trang độc hại trong năm 2026

HTTP 200 không còn có nghĩa là «dữ liệu đã được thu thập». Nepenthes, Iocaine và Cloudflare AI Labyrinth nuôi dưỡng các crawler bằng văn bản được tạo ra vô tận, trong khi các trang bị nhiễm độc khiến các đại lý AI khuyến nghị các thương hiệu không tồn tại trong 27–73,8% trường hợp. Chúng ta sẽ phân tích ba cơ chế làm hỏng dữ liệu một cách lén lút và bảy kiểm tra mà bắt giữ rác trước khi ghi vào cơ sở dữ liệu.

📅13 tháng 9, 2026
Bạn không bị cấm — bạn bị nhồi nhét rác: tarpit và trang độc hại trong năm 2026

Trình phân tích đang hoạt động. HTTP 200 đang chảy liên tục, proxy còn sống, captcha không xuất hiện, hàng đợi liên kết đang tăng lên. Và sau một tuần, phát hiện ra rằng một nửa số giá thu thập được là hư cấu, và hàng gigabyte lưu lượng đã đi vào các trang không tồn tại trên trang web thực. Đây không phải là sự cố của trình phân tích và cũng không phải là một nhóm IP kém. Đây là chế độ bảo vệ mới: trang web không chặn bạn, trang web nuôi bạn.

Trong một năm rưỡi, ngành công nghiệp bảo vệ chống bot đã âm thầm thay đổi mục tiêu. Chặn là một biện pháp tốn kém và dễ nhận thấy: scraper thấy 403, sửa dấu vân tay, thay đổi subnet và quay lại. Thay vào đó, có lợi hơn là không cản trở nó làm việc, mà làm cho công việc của nó trở nên vô nghĩa. Dưới đây là ba cơ chế đã hoạt động trong sản phẩm của hàng triệu trang web, và một bộ kiểm tra để phát hiện chúng ở phía bạn.

Cơ chế đầu tiên: tarpit thay vì chặn

Tarpit (tarpit, "hố nhựa đường") là một trình tạo trang web vô tận. Crawler nhận được một trang HTML hợp lệ với hàng chục liên kết, mỗi liên kết dẫn đến một trang được tạo ra tương tự, và hàng đợi duyệt luôn đầy.

Công cụ mã nguồn mở nổi tiếng nhất là Nepenthes. Cài đặt của nó cho thấy rõ ý định: theo mặc định, máy chủ giữ phản hồi từ 10 đến 65 giây, trả về văn bản "lời nói vô nghĩa của Markov", được tạo ra từ tập dữ liệu, và làm điều này một cách xác định — cùng một URL luôn trả về cùng một rác, để các trang trông giống như các tệp tĩnh thông thường, chứ không phải là bẫy. Dữ liệu được trả về từng phần nhỏ, "một vài byte", để đốt cháy thời gian chờ của khách hàng. Tác giả đưa ra số liệu trong một giờ làm việc: 1850 khách hàng khác nhau, 10 015 yêu cầu và 56 020 giây tổng độ trễ — khoảng mười lăm giờ thời gian máy của người khác đã bị lãng phí.

Iocaine được thiết kế khác: nó hoạt động như một proxy ngược trước trang web thực, ngay khi bị chặn lần đầu tiên, nó cung cấp cho bot một liên kết "độc" duy nhất và nhận diện nó khi quay lại, trong khi văn bản được tạo ra bằng chuỗi Markov — dựa vào việc văn bản này sẽ vào tập huấn luyện.

Tại Cloudflare, phương pháp tương tự đã trở thành sản phẩm — AI Labyrinth, được giới thiệu vào tháng 3 năm 2025. Các trang nhắm đến không được tạo ra ngay lập tức: sử dụng quy trình tiền tạo trên Workers AI, kết quả được lưu trữ trong R2 và phân phối nhanh chóng. Các liên kết đến mê cung được nhúng vào các trang thông thường thông qua chuyển đổi HTML, và trên chính các trang nhắm đến có các chỉ thị meta chống chỉ mục, để không làm tổn hại đến kết quả tìm kiếm. Điều quan trọng ở đây không phải là thời gian bot đã tiêu tốn, mà là tín hiệu: qua các liên kết, được giấu khỏi con người và được đánh dấu nofollow, chỉ có tự động đi qua, và việc chuyển sang ba cấp độ sâu trong một mê cung như vậy tự nó trở thành dấu vân tay của một bot xấu. Quy mô của vấn đề mà điều này được thực hiện, Cloudflare ước tính là hơn 50 tỷ yêu cầu từ các crawler AI mỗi ngày — chưa đến 1% tổng lưu lượng của mạng.

Cách tarpit xuất hiện trong các nhật ký của bạn

Bức tranh đặc trưng: hàng đợi hàng nghìn URL, chỉ tăng lên, thời gian phản hồi ổn định ở mức khoảng một giây rưỡi trở lên, mã HTTP — toàn bộ là 200, và số lượng bản ghi hữu ích được trích xuất bằng không. Không có 403 nào, không có captcha nào, và không có lối thoát: dù có bao nhiêu trang đã được duyệt, các liên kết mới xuất hiện nhanh hơn so với các liên kết cũ bị đóng lại.

Cơ chế thứ hai: nội dung độc hại cho các tác nhân AI

Nếu cơ chế đầu tiên tiêu tốn tài nguyên, cơ chế thứ hai đánh vào kết quả. Các nhà nghiên cứu Minghao Luo và Liang Chen vào tháng 6 năm 2026 đã công bố một công trình với mô phỏng FORGE (Fake Online Recommendations in Generative Environments): họ đã kiểm tra 12 mô hình ngôn ngữ lớn trên 225 sản phẩm trong 15 danh mục — từ quần áo đến điện tử. Cơ chế tấn công rất đơn giản: trong văn bản của trang, thương hiệu thực được thay thế bằng một thương hiệu hư cấu.

Kết quả — một trang giả mạo mang lại tới 27% trường hợp, khi trợ lý đề xuất thương hiệu không tồn tại, và việc thay thế tất cả ba kết quả hàng đầu của tìm kiếm nâng tỷ lệ này lên 73,8%. Các mô hình không chỉ lặp lại tên giả — chúng sáng tạo ra những ưu điểm cho nó, bao gồm cả sự phổ biến giả trong các cộng đồng. Ba biện pháp bảo vệ được đề xuất (nhắc nhở về sự hoài nghi, đồng thuận dựa trên kiến thức nội bộ của mô hình, kiểm tra giữa các tài liệu) hoặc không hoạt động, hoặc tạo ra các vấn đề mới. Kết luận của các tác giả: cần kiểm tra ở trên dòng — ở giai đoạn thu thập, chứ không phải ở giai đoạn suy luận.

Cơ chế thứ ba hoàn thiện bức tranh. Trong công trình "A Whole New World: Creating a Parallel-Poisoned Web Only AI-Agents Can See" (Shaked Zychlinski) mô tả cloaking, nhắm vào các tác nhân AI: trang web nhận diện tác nhân qua các thuộc tính của trình duyệt, chữ ký của framework tự động hóa và các đặc điểm mạng và cung cấp cho nó một phiên bản khác của trang — với các hướng dẫn ẩn và các sự kiện bị thay thế. Con người, khi mở cùng một URL, thấy một trang bình thường, vì vậy việc kiểm tra thủ công "tôi đã vào, mọi thứ đều ổn" không chứng minh được gì.

Tại sao đây trước hết là vấn đề ngân sách

Tarpit được thiết kế để mỗi trang đều rẻ cho trang web và đắt cho bạn. Khi lưu lượng được thanh toán theo gigabyte, trình tạo trang vô tận trở thành bộ đếm chi phí của bạn: bạn trả tiền cho megabyte văn bản Markov, mà không bao giờ trở thành một dòng trong cơ sở dữ liệu. Chính xác là phép toán giống như với các yêu cầu không thành công — giá cho một gigabyte không nói lên giá trị của kết quả, cho đến khi bạn tính chi phí cho một bản ghi thành công, chứ không phải yêu cầu.

Từ đó, quy tắc thực tiễn đầu tiên: giới hạn lưu lượng phải được đặt ở cấp độ miền và nhiệm vụ, chứ không chỉ ở cấp độ tài khoản. Miền nào đã tiêu tốn hơn một gigabyte mà không trả lại một bản ghi nào, cần phải dừng lại tự động — nếu không, một cái bẫy có thể tiêu tốn ngân sách hàng ngày trong một đêm.

Bảy kiểm tra phát hiện rác

  1. Đếm yield, chứ không phải mã phản hồi. Chỉ số chính của dây chuyền là tỷ lệ yêu cầu, đã cho một bản ghi hợp lệ với các trường bắt buộc được điền. Khi bạn nhìn vào tỷ lệ 200, tarpit trông giống như một nguồn hoàn toàn khỏe mạnh.
  2. URL canary. Sau mỗi N yêu cầu, hãy yêu cầu một địa chỉ chắc chắn không tồn tại trong miền — với một đoạn đường ngẫu nhiên. Một trang web bình thường sẽ trả về 404 hoặc chuyển hướng, trong khi trình tạo sẽ trả về một trang đầy đủ với văn bản và liên kết. Đây là kiểm tra rẻ nhất và đáng tin cậy nhất.
  3. Kiểm tra chéo từ một hồ sơ IP khác. Lấy cùng một URL qua hai tuyến đường khác nhau — ví dụ, qua IP cư trú và qua di động — và so sánh băm của các trường chính: giá cả, tên, tình trạng có sẵn. Sự khác biệt khi cùng một URL và thời gian yêu cầu gần nhau có nghĩa là bạn đang thấy các phiên bản khác nhau của trang, và ít nhất một trong số đó không dành cho con người.
  4. Không đi theo các liên kết vô hình. Các liên kết với nofollow, kích thước bằng không, display:none hoặc nằm ngoài màn hình — đây là bẫy, và việc đi qua chúng chính là dấu vân tay của bot. Lọc chúng ở giai đoạn trích xuất liên kết, chứ không phải sau đó.
  5. Giới hạn cứng cho phản hồi. Giới hạn không chỉ thời gian chờ, mà còn kích thước tối đa của nội dung và độ sâu tối đa của việc duyệt từ điểm vào. Phản hồi chậm với các phần nhỏ — là dấu hiệu điển hình của một hố, chứ không phải một máy chủ chậm.
  6. Tìm kiếm tính mẫu của văn bản. Tạo ra từ Markov tự tiết lộ mình qua thống kê: chiều dài đoạn văn nghi ngờ đều, các n-gram lặp lại giữa các trang "khác nhau", hàng chục liên kết ra ngoài khi không có các yếu tố cấu trúc như giá cả, mã sản phẩm hoặc ngày tháng. Một kiểm tra đơn giản về các shingle lặp lại giữa các trang liền kề trong miền sẽ loại bỏ những nguồn như vậy.
  7. Kiểm tra các con số theo lẽ thường. Giá nằm ngoài hành lang lịch sử, sản phẩm không có bất kỳ sự trùng khớp nào trong cơ sở dữ liệu thương hiệu của bạn, sự gia tăng đột ngột về danh mục — đây là các quy tắc xác thực cần phải có trước khi ghi vào cơ sở dữ liệu, chứ không phải trong báo cáo sau một tháng. Đặc biệt nếu dữ liệu sau đó được đưa vào mô hình hoặc trong quyết định tự động về việc mua hàng.

Phải làm gì với tập dữ liệu đã thu thập

Nếu nghi ngờ xuất hiện sau, hãy phân loại không theo ngày tháng, mà theo nguồn. Nhóm các bản ghi theo miền và xem xét ba chỉ số: tỷ lệ trang không có các trường bắt buộc, số lượng liên kết ra trung bình trên mỗi trang và độ phân tán chiều dài văn bản. Các miền bẫy thường nổi bật ngay lập tức theo cả ba chỉ số. Sau đó, chọn lọc kiểm tra lại các URL gây tranh cãi từ một hồ sơ IP khác — nếu dữ liệu không khớp, toàn bộ tập dữ liệu từ miền đó cần phải được thu thập lại, chứ không phải sửa chữa bằng bộ lọc.

Cần xem xét lại các quy tắc cho các kịch bản tác nhân, nơi mô hình tự đi qua các trang và tự đưa ra quyết định. Chính tại đó, việc thay thế một trang mang lại hiệu quả tối đa, và không có người trung gian nào có thể nhận thấy sự kỳ lạ trong chuỗi. Bảo hiểm tối thiểu — yêu cầu xác nhận thực tế từ hai nguồn độc lập và không cho phép tác nhân hành động dựa trên dữ liệu thu được từ một miền duy nhất.

Tóm tắt

Các bot đã từ lâu vượt qua con người về tỷ lệ lưu lượng, và bảo vệ đã phản ứng không chỉ bằng bộ lọc: ngày nay rẻ hơn để nuôi cho tự động một rác rưởi có vẻ hợp lý, hơn là tranh cãi với nó bằng các biện pháp chặn. Có ba hệ quả thực tiễn. Đếm các bản ghi hữu ích, chứ không phải trạng thái phản hồi. Giữ các kiểm tra canary và giới hạn lưu lượng cho mỗi miền. So sánh các trang gây tranh cãi từ các hồ sơ IP khác nhau — sự khác biệt giữa các phiên bản của cùng một trang chính là bằng chứng cho thấy bạn đang thấy một internet riêng biệt, được chuẩn bị đặc biệt cho các bot. Proxy trong sơ đồ này chỉ giải quyết một nhiệm vụ — cung cấp cái nhìn thứ hai độc lập về trang; mọi thứ khác đều do xác thực ở phía bạn thực hiện.