Spam Blocker
แพคเกจนี้ถูกเผยแพร่ครั้งแรกภายใต้ขอบเขต @plebbit เปลี่ยนชื่อเป็น @bitsocial/spam-blocker-server และ @bitsocial/spam-blocker-challenge การอ้างอิงถึงชื่อเก่าอาจยังคงปรากฏในเอกสารหรือฐานรหัสเก่า
Spam Blocker เป็นบริการตรวจจับสแปมแบบรวมศูนย์ที่ประเมินสิ่งพิมพ์ที่เข้ามาและกำหนดคะแนนความเสี่ยง ประกอบด้วยสองแพ็คเกจ:
@bitsocial/spam-blocker-server-- เซิร์ฟเวอร์ HTTP ที่โฮสต์การประเมินและท้าทาย API@bitsocial/spam-blocker-challenge-- แพ็คเกจไคลเอ็นต์แบบน้ำหนักเบาที่ชุมชนผสานรวมเพื่อส่งสิ่งพิมพ์เพื่อรับการประเมิน
ซอร์สโค้ด: github.com/bitsocialnet/spam-blocker
การให้คะแนนความเสี่ยงทำงานอย่างไร
ทุกสิ่งพิมพ์ที่ส่งไปยังปลายทาง /evaluate จะได้รับคะแนนความเสี่ยงที่เป็นตัวเลข คะแนนเป็นการผสมผสานแบบถ่วงน้ำหนักของสัญญาณต่างๆ:
| สัญญาณ | คำอธิบาย |
|---|---|
| อายุบัญชี | บัญชีใหม่จะได้รับคะแนนความเสี่ยงที่สูงกว่า |
| กรรม | กรรมชุมชนที่สะสมช่วยลดความเสี่ยง |
| ชื่อเสียงของผู้เขียน | ข้อมูลชื่อเสียงที่รวบรวมโดยตัวสร้างดัชนีเครือข่ายเบื้องหลัง |
| การวิเคราะห์เนื้อหา | การวิเคราะห์พฤติกรรมระดับข้อความ (ความหนาแน่นของลิงก์ รูปแบบสแปมที่รู้จัก ฯลฯ) |
| ความเร็ว | การโพสต์ต่อเนื่องกันอย่างรวดเร็วจากผู้เขียนคนเดียวกันจะเพิ่มความเสี่ยง |
| หน่วยสืบราชการลับ IP | ตำแหน่งทางภูมิศาสตร์ระดับประเทศและการค้นหาฟีดภัยคุกคาม เก็บเฉพาะรหัสประเทศเท่านั้น ที่อยู่ IP ดิบจะไม่ถูกแชร์กับชุมชน |
เกณฑ์ระดับ
คะแนนความเสี่ยงจะจับคู่กับหนึ่งในสี่ระดับที่กำหนดค่าได้ซึ่งกำหนดว่าจะเกิดอะไรขึ้นต่อไป:
- ยอมรับอัตโนมัติ -- คะแนนต่ำพอที่จะอนุมัติสิ่งพิมพ์โดยไม่ต้องท้าทายใดๆ
- เพียงพอสำหรับ OAuth -- ผู้เขียนต้องทำการยืนยัน OAuth ให้เสร็จสิ้นจึงจะดำเนินการต่อได้
- OAuth-plus-more -- OAuth เพียงอย่างเดียวไม่เพียงพอ ต้องมีการตรวจสอบเพิ่มเติม (เช่น CAPTCHA)
- ปฏิเสธอัตโนมัติ -- คะแนนสูงเกินไป สิ่งพิมพ์ถูกปฏิเสธโดยสิ้นเชิง
ค่าขีดจำกัดทั้งหมดสามารถกำหนดค่าได้ต่อชุมชน
กระแสความท้าทาย
เมื่อสื่อเผยแพร่ตกอยู่ในระดับที่ต้องมีการตรวจสอบ ขั้นตอนความท้าทายจะเริ่มต้นขึ้น:
- ผู้เขียนจะได้รับแจ้งให้ตรวจสอบสิทธิ์ผ่าน OAuth (GitHub, Google, Twitter และผู้ให้บริการอื่นๆ ที่รองรับ)
- หาก OAuth เพียงอย่างเดียวไม่เพียงพอ (ระดับ 3) ระบบจะแสดง CAPTCHA สำรอง ที่ขับเคลื่อนโดย Cloudflare Turnstile
- ข้อมูลระบุตัวตน OAuth ใช้สำหรับการตรวจสอบเท่านั้น โดย ไม่เคยแชร์ กับชุมชนหรือผู้ใช้รายอื่น
จุดสิ้นสุด API
POST /evaluate
ส่งสิ่งพิมพ์เพื่อประเมินความเสี่ยง ส่งกลับคะแนนความเสี่ยงที่คำนวณได้และระดับความท้าทายที่ต้องการ
POST /challenge/verify
ส่งผลลัพธ์ของการท้าทายที่เสร็จสมบูรณ์ (โทเค็น OAuth, โซลูชัน CAPTCHA หรือทั้งสองอย่าง) เพื่อการยืนยัน
GET /iframe/:sessionId
ส่งคืนหน้า HTML ที่ฝังได้ซึ่งแสดงผล UI ความท้าทายที่เหมาะสมสำหรับเซสชันที่กำหนด
การจำกัดอัตรา
การจำกัดอัตราจะถูกนำไปใช้แบบไดนามิกโดยพิจารณาจากอายุและชื่อเสียงของผู้เขียน ผู้เขียนที่ใหม่กว่าหรือมีชื่อเสียงน้อยกว่าต้องเผชิญกับข้อจำกัดที่เข้มงวดมากขึ้น ในขณะที่ผู้เขียนที่ได้รับการยอมรับแล้วจะมีเกณฑ์ที่กว้างกว่า วิธีนี้จะช่วยป้องกันสแปมจำนวนมากโดยไม่ลงโทษผู้เข้าร่วมที่เชื่อถือได้
ตัวสร้างดัชนีเครือข่ายพื้นหลัง
เซิร์ฟเวอร์เรียกใช้ตัวสร้างดัชนีพื้นหลังที่รวบรวมข้อมูลเครือข่ายอย่างต่อเนื่องเพื่อสร้างและรักษาข้อมูลชื่อเสียงของผู้เขียน ข้อมูลนี้จะป้อนเข้าสู่ไปป์ไลน์การให้คะแนนความเสี่ยงโดยตรง ช่วยให้ระบบสามารถจดจำผู้เข้าร่วมที่มีเจตนาดีซ้ำๆ ทั่วทั้งชุมชน
ความเป็นส่วนตัว
Spam Blocker ได้รับการออกแบบโดยคำนึงถึงความเป็นส่วนตัว:
- ข้อมูลประจำตัว OAuth ใช้สำหรับการยืนยันความท้าทายเท่านั้น และจะไม่ เปิดเผย ต่อชุมชน
- ที่อยู่ IP ได้รับการแก้ไขเป็น รหัสประเทศเท่านั้น; IP ดิบจะไม่ถูกจัดเก็บหรือแชร์
ฐานข้อมูล
เซิร์ฟเวอร์ใช้ SQLite (ผ่าน better-sqlite3) สำหรับการคงอยู่ของข้อมูลชื่อเสียง สถานะเซสชัน และการกำหนดค่าในเครื่อง