5 điểm bởi GN⁺ 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Do một hiện tượng có vẻ là lỗi tạm thời của Reddit vào năm 2021, lý do gỡ spam toàn site và dữ liệu đánh giá nội bộ vốn thường bị ẩn dưới dạng Removed: Auto trong Relay for reddit đã bị lộ ra
  • Theo mã nguồn lưu trữ công khai, thông tin gỡ được truyền qua ban_info.banner; Relay hiển thị banned_by=true từ API thành Auto, nhưng có vẻ vấn đề phát sinh khi cùng trường này lại chứa lý do nội bộ
  • Các lý do bị lộ gồm domain, spammit, banned user, shadowban, spamurai; trong đó spamurai còn bao gồm tuổi tài khoản, karma, số lần bị báo cáo, ISP, miền email, User-Agent, header ngôn ngữ, dấu vân tay TLS, referrer, thậm chí cả điểm từ Perspective API
  • Điểm SPAM của Google Perspective API gần như trùng khớp với giá trị trong log gỡ của Reddit; cũng xác nhận các trường hợp điểm số dao động mạnh vì những đặc tính như thêm vài ký tự ngắn, thay bằng chữ Cyrillic, hoặc bỏ qua chữ hoa/thường và chữ số
  • Hệ thống chống spam của Reddit dường như là một kiến trúc nhiều thế hệ pha trộn giữa bộ kiểm tra nền Python 2.7, REV1/REV2 dựa trên luật Lua, Snooron và các công cụ OCR/phân loại hình ảnh; đến năm 2026, tác giả cho rằng rủi ro công khai đã giảm do Perspective API sắp bị ngừng và spam dựa trên LLM đã thay đổi cục diện

Các lý do gỡ bị lộ vào năm 2021

  • Một người dùng từng là kiểm duyệt viên Reddit đã nhìn thấy thông điệp nội bộ của hệ thống chống spam lẽ ra không được hiển thị, khi nhận thông báo về spam bị gỡ trong ứng dụng Relay for reddit vào năm 2021
  • Trong giao diện kiểm duyệt thông thường, việc tự động gỡ spam sẽ được hiển thị như Removed: Auto, nhưng lúc đó lý do gỡ thực tế và dữ liệu nội bộ lại xuất hiện bằng chữ đỏ
  • Hiện tượng này trở lại bình thường sau khoảng một giờ, và tài liệu còn lại chỉ là các ảnh chụp màn hình khi đó

Cách kiểm duyệt Reddit và hiển thị Auto

  • Trong subreddit, tức các cộng đồng con của Reddit, kiểm duyệt viên cộng đồng phụ trách việc gỡ bài, chặn người dùng, quản lý modmail và các việc tương tự
  • Kiểm duyệt viên có thể xem bài viết hoặc bình luận đã bị ai gỡ
    • Nếu kiểm duyệt viên thường gỡ, tên kiểm duyệt viên sẽ được hiển thị
    • Nếu AutoModerator gỡ, sẽ hiển thị AutoModerator
    • Nếu bộ lọc spam toàn site hoặc quản trị viên Reddit gỡ, có thể hiển thị là Auto
  • Trong nhật ký kiểm duyệt, các lần gỡ toàn site xuất hiện là reddit hoặc Anti-Evil Operations

Đường lộ dữ liệu nhìn từ mã nguồn lưu trữ công khai

  • Reddit từng công khai mã nguồn đến năm 2017, và có thể lần theo một phần luồng xử lý gỡ bằng kho mã lưu trữ này
  • Hàm gỡ của kiểm duyệt viên POST_remove gọi admintools.spam
    • moderator_banned phân biệt chủ thể gỡ là kiểm duyệt viên hay quản trị viên
    • banner ghi lại tên người dùng đã thực hiện thao tác gỡ
  • get_mod_attributes xuất ban_info của mục đã bị gỡ vào phản hồi API
    • Nếu kiểm duyệt viên gỡ, giá trị banner được trả về dưới dạng banned_by
    • Nếu quản trị viên gỡ, thay vì tên thật thì trả về True
  • Trong mã đã giải biên dịch của Relay for reddit, nếu bannedBy"true" thì ứng dụng đổi thành chuỗi Auto để hiển thị
  • Reddit cũng có đường mã mà khi phát hiện miền bị cấm trong lúc gửi liên kết, nó sẽ đưa lý do nội bộ vào trường banner như banner = "domain (REASON)"
  • Trường banner chứa lý do gỡ nội bộ vốn chỉ nên hiển thị cho quản trị viên toàn site, nhưng được suy đoán là đã lộ cho kiểm duyệt viên do lỗi ở một đường mã tương tự

Các nhóm lý do gỡ bị lộ

  • domain

    • Gỡ dựa trên miền là một nhóm có thể xác nhận ngay trong mã công khai
    • Phần lớn có dạng Removed: domain (spam), nhưng đôi khi có ghi chú cụ thể hơn
    • Từng có trường hợp gỡ một miền cụ thể vào năm 2012 để thử nghiệm chống spam liên quan đến Tumblr
    • Những cụm như le sexxxxy sex spam cũng xuất hiện như lý do gỡ
  • spammit

    • spammit dường như là nhóm phân tích bài đăng và gắn phần trăm xác suất spam
    • Điểm trong các ca gỡ được xác nhận dao động từ 39.71% đến 98.19%
    • Trong các subreddit đó, cũng có nhiều trường hợp bài Imgur bình thường bị gỡ với điểm spam 70–98%, nên độ chính xác có vẻ không cao
  • Người dùng bị chặn và shadowban

    • Có các lần gỡ với dạng Removed: banned user hoặc Removed: Reddit (banall performed)
    • Phần lớn các trường hợp này là bài spam rõ ràng như liên kết dịch vụ quảng cáo
    • Bài của người dùng bị shadowban được hiển thị như Removed: Reddit (shadowban applied on 날짜)
    • Shadowban là kiểu chặn im lặng: bản thân người dùng vẫn tưởng mình có thể tiếp tục đăng, nhưng người khác sẽ không thấy bài viết và bình luận của họ

Dữ liệu đánh giá nội bộ do spamurai làm lộ ra

  • spamurai là mục chứa nhiều dữ liệu nội bộ nhất trong các nhóm bị lộ
  • Trong tài liệu thuyết trình công khai, Reddit nói họ dùng “ML” cho Minsky và “Rules” cho Spamurai
  • Lý do gỡ từ spamurai đi kèm cả luật đơn giản lẫn bản dump dữ liệu chi tiết
    • Một tên có vẻ là hệ thống con là echelon xuất hiện trong các lần gỡ theo từ khóa cụ thể
    • Có trường hợp gỡ bình luận của tài khoản dưới 30 phút tuổi khi nó khớp điều kiện spam
    • Có thể thấy các luật cụ thể như spam áo thun liên kết đáng ngờ, bình luận chỉ có URL, hoặc bình luận có điểm Perspective cao
  • Các mục trong bản dump dữ liệu của spamurai

    • link t3_... hoặc comment t1_...fullname ID của Reddit
    • t1 là bình luận
    • t2 là người dùng
    • t3 là bài đăng
    • t4 là private message
    • t5 là subreddit
    • Giá trị perspective spam được xác nhận là điểm SPAM từ Google Perspective API
    • Có cả dữ liệu liên quan đến tài khoản
      • tuổi tài khoản
      • điểm spammy
      • karma
      • số lần bị báo cáo
      • miền email
      • ISP hoặc tên tổ chức
    • Dữ liệu truy cập và môi trường cũng được đưa vào
      • có dùng oauth.reddit.com hay không
      • User-Agent
      • header ngôn ngữ LANG
      • referrer
      • RHS có vẻ là dấu vân tay trình duyệt
      • một giá trị có vẻ là dấu vân tay TLS
      • URL thumbnail
      • nội dung bài viết hoặc bình luận
      • liên kết Reddit gốc

Perspective API và khả năng lách tránh

  • Giá trị 0.12571795 perspective spam trong log Reddit về thực chất trùng với kết quả gọi thuộc tính SPAM của Perspective API
  • Khi gọi Perspective API với cùng nội dung, giá trị trả về là 0.12571794; chênh lệch chỉ 0.00000001, có thể xem là sai số làm tròn
  • Định dạng điểm ví dụ trong tài liệu Perspective và việc CTO Reddit từng dẫn ví dụ liên quan cũng được dùng như bằng chứng cho thấy Reddit đã dùng Perspective
  • Thuộc tính SPAM của Perspective không phải để phát hiện độc hại mà là thuộc tính thực nghiệm dành cho phát hiện spam, được mô tả là huấn luyện trên một tập dữ liệu duy nhất gồm bình luận New York Times và dữ liệu kiểm duyệt
  • Sau tháng 2 năm 2026, Google Cloud không còn cho tạo dự án Perspective API mới, nên sẽ khó thử nghiệm mới
  • Sự thay đổi nhạy cảm của điểm SPAM

    • Có những trường hợp điểm SPAM của Perspective thay đổi mạnh chỉ vì thêm vài ký tự
    • Puppygirl Consulting is the best way to grow your revenue có điểm 0.8638981
    • Nếu thêm qp vào cuối thì rơi xuống 0.010811162
    • Kết quả cho thấy có vẻ hệ thống bỏ qua chữ số và chữ hoa/thường
    • Dù đổi chữ hoa/thường và chữ số trong số điện thoại thì vẫn trả về cùng điểm
    • Một số hệ chữ khác cũng bị xử lý ra cùng điểm
    • Các chuỗi Cyrillic khác nhau nhận cùng điểm 0.35077864
    • Trong Buy my product, nếu thay chữ Latin p bằng chữ Cyrillic р thì điểm giảm từ 0.6473346 xuống 0.4452748
    • Nếu căn theo API công khai để chỉnh sửa thông điệp từng chút một, có thể đã từng lách được một trong các tiêu chí đánh giá chính của spamurai

Phản ánh từ báo cáo người dùng và phê duyệt của kiểm duyệt viên

  • spamurai dường như cũng phản ánh báo cáo của người dùng vào các luật gỡ
  • Lý do REPORT: High spam perspective score on comment with hyperlink reported for spam cho thấy một bình luận có hyperlink bị báo spam đã bị gỡ vì điểm Perspective cao, và kiểm duyệt viên có thể phê duyệt lại
  • Một số lý do gỡ còn chứa câu nói rằng “nếu kiểm duyệt viên phê duyệt nội dung này thì sau này số lần gỡ sẽ giảm”
  • Tham số train_spam trong admintools.spam của mã công khai Reddit quyết định có dùng hành động của kiểm duyệt viên để huấn luyện hệ chống spam hay không
  • Có thể hiểu rằng khi subreddit phê duyệt bài bình thường, điều đó có thể giúp giảm false positive

Các luật gỡ khác và kiểm tra URL

  • Có các trường hợp bị gỡ với liên kết redirect của Pinterest, liên kết mega.nz, và các liên kết liên quan đến subdomain có thể tạo tự do
  • Trong số các lần gỡ liên kết mega.nz, có cả trường hợp hợp lệ thực ra là liên kết video lưu trữ YouTube, cho thấy có false positive
  • Trường hợp Matched forbidden regex u'torenteu' bị gỡ dù nội dung thực tế không trực tiếp chứa torenteu
    • Reddit dùng unidecode để chuyển chuỗi Unicode sang ASCII
    • Tiếng Hàn 토렌.트 có thể sau chuyển đổi và xử lý bổ sung sẽ khớp với torenteu
  • Trường hợp Failed inspection: Phrase(s) [u'UA-49307539-'] cho thấy chuỗi bị khớp không nằm trong nội dung bình luận hay văn bản đã chuyển đổi, mà nằm trong Google Analytics ID trong HTML của trang đích sau khi liên kết chuyển hướng
  • inspection dường như là hành vi Reddit mở URL, lần theo redirect rồi tìm mẫu trong trang
  • Khi đăng liên kết tới một trang web có chứa chuỗi đó bằng tài khoản thử nghiệm, một tài khoản 5 năm tuổi đã bị chặn ngay lập tức và lịch sử đăng bài bị xóa
    • Với tài khoản bạn bè có lịch sử hoạt động nhiều hơn thì không tái hiện được điều tương tự
    • Không chắc bộ lọc đó còn hoạt động hay việc chặn tài khoản chỉ là ngẫu nhiên, nên chuỗi thực tế đã được thay đổi khi công bố

Các thành phần chống spam Reddit trong quá khứ và hiện tại

  • Bài viết năm 2023 của Reddit Engineering Protecting Reddit Users in Real Time at Scale có nhắc tới Rule-Executor-V1, REV2 và Snooron
  • Mốc thời gian được hiểu như sau
    • REV1 được tạo vào năm 2016
    • Snooron được phát triển vào năm 2021 để hiện đại hóa REV1
    • Khoảng 2 năm sau đó hệ thống được di chuyển sang REV2
  • REV1 và REV2 chạy bằng luật Lua, và do các chuỗi như nil cùng thời điểm xuất hiện nên có khả năng liên quan tới spamurai
  • Các chuỗi Unicode kiểu Python 2.7 như u'torenteu', u'UA-49307539-' có thể là mã kiểm tra nền Python 2.7 nằm ngoài spamurai, hoặc mã kiểm tra URL riêng biệt do REV1 gọi ra
  • Theo bài thuyết trình liên quan, Snooron chạy trên Flink Stateful Functions, thực hiện phân loại hình ảnh và OCR, và dùng Python 3 cho worker
  • Tính đến năm 2024, Reddit cho biết trong tài liệu Australian eSafety rằng họ dùng Hive AIGoogle Vision OCR API cho OCR và phân loại hình ảnh/video
  • Hive OCR hỗ trợ 12 ngôn ngữ, Google OCR được dùng kèm để hỗ trợ thêm nhiều ngôn ngữ, và Reddit cũng đang làm một công cụ nội bộ hỗ trợ 80 ngôn ngữ
  • Một ticket từ năm 2009 xác nhận crm114 là bộ lọc spam có thể học từ kiểm duyệt viên, và CRM114 là phần mềm phân loại spam mã nguồn mở lâu đời

Vì sao công bố vào năm 2026

  • Nếu công bố thông tin này vào năm 2021, tác giả cho rằng điều đó có thể gây tác hại nghiêm trọng cho vấn đề spam của Reddit
  • Đến năm 2026, Perspective API is shutting down dự kiến kết thúc vào cuối năm, nên ngay cả khi Reddit còn dùng thì họ cũng sắp phải di chuyển sang hệ khác
  • Tác giả cũng cho rằng ngành spam đã bị LLM thay đổi, nên Reddit hẳn đã cải tổ đáng kể hệ thống chống spam của mình cho phù hợp với năm 2026
  • Vì những lý do đó, tác giả đánh giá rủi ro của việc công khai thông tin này ở thời điểm năm 2026 là thấp hơn

1 bình luận

 
Các ý kiến trên Lobste.rs
  • Đây là tư liệu và nghiên cứu thú vị. Như phần kết luận cũng nói, hiếm khi có cơ hội nhìn vào chi tiết của những cơ chế chống lạm dụng như vậy; điều đặc biệt nổi bật là kỹ năng CSS rất điêu luyện đặc trưng của Lyra.
    Các thanh kiểm duyệt và vòng tròn đỏ trong UI Reddit được dựng lại thoạt nhìn tưởng là ảnh chụp màn hình, nhưng thực ra là một mô hình hoàn toàn có thể tương tác.

    • Trước khi đọc bình luận này, tôi hoàn toàn không nhận ra đó không phải là hình ảnh.
  • Mỗi khi có bài blog mới được đăng là tôi luôn mong chờ. Nội dung thật sự thú vị, và kỹ năng tái hiện các UI khác cũng rất tuyệt.
    Đến giờ tôi đã tìm được ít nhất một easter egg.

    • Cảm ơn. Trong bài lần này tôi đã cài khá nhiều thứ như vậy ;)
  • Đoạn nói rằng để thử bằng tài khoản của mình, tác giả đã đăng chuỗi <pre>UA-49307539-2</pre> lên website rồi liên kết trên Reddit, và một tài khoản thử nghiệm 5 năm tuổi lập tức bị đình chỉ, toàn bộ lịch sử đăng bài cũng bị xóa sạch, thật sự khá dữ dội.
    Vì vậy, tác giả nói đã đổi số thật thành UA-49307539- để không công khai đoạn văn bản có thể giết tài khoản; hy vọng tài khoản đó đúng là chỉ dùng để thử nghiệm và không có gì quan trọng.

  • Khi mở bằng Safari di động trên bản beta dành cho nhà phát triển iOS mới nhất của iPhone 16 Pro, trang tại <url> báo lỗi “a problem repeatedly occurred” nên không xem được.

    • Tôi hoàn toàn không biết vì sao lại vậy, và hiện cũng không có iPhone bên cạnh.
      Nếu ai đó có thể tìm nguyên nhân gây crash bằng cách chia đôi HTML để dò lỗi thì tôi sẽ rất biết ơn.
  • Với những ai tò mò, khóa Perspective API được nhúng trong đó không hợp lệ.

    • Nhìn vào việc công ty tư vấn bị che trong ví dụ spam ở bans (2016 - present)Puppygirl Consulting, những người nghiện devtools có thể đoán được rằng các phần bị che có lẽ là giả hoặc là easter egg :^)