How Does Spam Protection Work on Stack Exchange?
Bài tóm tắt Stack Overflow 2020 3. Quy mô lớn Độ khó: Dễ
Stack Overflow · 2020 · 3. Quy mô lớn · Độ khó: Dễ — bài gốc
Tác giả thuộc Charcoal, nhóm cộng đồng làm bot chống spam (dùng "chúng tôi" khi nói về Charcoal). Bài chỉ kể các lớp công khai; một số lớp của Stack Exchange được giữ kín có chủ đích.
Bối cảnh
"Đặt một ô nhập liệu lên Internet thì sẽ có người nhét spam vào." Một mạng có hàng triệu lượt truy cập mỗi ngày và rất nhiều ô nhập liệu cần chống spam ở nhiều lớp, mỗi lớp của đường đi request (CDN → load balancer → reverse proxy → app) đều chặn được một phần.
Thay đổi chính (các lớp, từ ngoài vào trong)
- Rate limit ở tầng thấp: gửi request nhanh hơn sức người thì nhận HTTP 429. Ngưỡng cố ý không công bố. SRE có thể chặn hẳn IP gây phiền; danh sách exit node của Tor là công khai nên có thể tắt truy cập qua Tor khi cần.
- SpamRam (trong app): hệ tự viết kiểm tra mọi bài mới. Bài bị chặn sẽ đưa IP nguồn vào cơ chế chặn: chặn hẳn, giới hạn tốc độ mạnh, hoặc cấm đăng ("Bạn không thể đăng do lượng spam/lạm dụng từ mạng của bạn"). Cờ spam của user và moderator (kể cả khi moderator xoá user với lý do spam) quay ngược lại làm tín hiệu cho SpamRam.
- Cộng đồng gắn cờ: user từ 15 reputation gắn cờ spam được; 6 cờ thì bài tự xoá và tác giả được đưa vào SpamRam.
- SmokeDetector và metasmoke (Charcoal, bot cộng đồng):
- nghe websocket cấp cho trang realtime để nhận mọi bài mới và bài sửa trên toàn mạng, quét bằng rất nhiều regex và heuristic, đẩy bài nghi spam vào chatroom cho người gắn cờ;
- nhắm 0% bỏ sót chứ không phải 0% báo nhầm, vì luôn có người xem lại;
- từ cuối 2016: autoflag cho các bài chắc chắn nhất (chạy thử không gắn cờ, rồi thử bằng tài khoản một tình nguyện viên, ra mắt 2/2017), dùng cờ mà user "cho mượn"; tăng từ 1 lên 3 rồi 4 cờ tự động mỗi bài, thời gian tới lúc xoá giảm gần như ngay.
Vì sao
Theo tác giả, spam đến theo đợt; lúc đỉnh, người gắn cờ không theo kịp, nên phải để máy làm phần chắc chắn và giữ người cho phần còn lại. Mỗi lớp nuôi dữ liệu cho lớp khác: cờ của người dạy SpamRam, SpamRam điều khiển việc chặn IP.
Bài học cho SWE
- Chống lạm dụng là defense in depth: rate limit rẻ ở rìa, phân loại nội dung trong app, cuối cùng là con người.
- Vòng phản hồi từ quyết định của người (cờ, moderator) về bộ lọc tự động quan trọng ngang chính bộ lọc.
- Một luồng sự kiện công khai (websocket realtime) cho phép cộng đồng xây công cụ bên ngoài mà không cần truy cập nội bộ.
Liên quan
#Spam#Rate limit#HTTP 429#IP block#SpamRam#Community moderation#SmokeDetector#Autoflag#Defense in depth
Được nhắc tới trong
Công ty (1)