Nhìn vào bên trong hệ thống chống spam của Reddit
(lyra.horse)- 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: Autotrong 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=truetừ 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à
reddithoặcAnti-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_removegọiadmintools.spammoderator_bannedphân biệt chủ thể gỡ là kiểm duyệt viên hay quản trị viênbannerghi lại tên người dùng đã thực hiện thao tác gỡ
get_mod_attributesxuấtban_infocủ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ạngbanned_by - Nếu quản trị viên gỡ, thay vì tên thật thì trả về
True
- Nếu kiểm duyệt viên gỡ, giá trị
- Trong mã đã giải biên dịch của Relay for reddit, nếu
bannedBylà"true"thì ứng dụng đổi thành chuỗiAutođể 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
bannernhưbanner = "domain (REASON)" - Trường
bannerchứ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 spamcũng xuất hiện như lý do gỡ
-
spammitspammitdườ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 userhoặcRemoved: 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ọ
- Có các lần gỡ với dạng
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à
echelonxuấ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
- Một tên có vẻ là hệ thống con là
-
Các mục trong bản dump dữ liệu của spamurai
link t3_...hoặccomment t1_...là fullname ID của Redditt1là bình luậnt2là người dùngt3là bài đăngt4là private messaget5là 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.comhay không - User-Agent
- header ngôn ngữ
LANG - referrer
RHScó 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
- có dùng
Perspective API và khả năng lách tránh
- Giá trị
0.12571795 perspective spamtrong 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 revenuecó điểm 0.8638981- Nếu thêm
qpvà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ữ Latinpbằ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 spamcho 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_spamtrongadmintools.spamcủ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ứatorenteu- 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ớitorenteu
- Reddit dùng
- 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 inspectiondườ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ư
nilcù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 AI và Google 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
crm114là 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.
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.
Đ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.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ệ.
bans (2016 - present)là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 :^)