Miasma: เครื่องมือที่ขัง AI เว็บสแครปเปอร์ไว้ในลูปมลพิษไม่รู้จบ
(github.com/austin-weeks)- Miasma คือ เครื่องมือเซิร์ฟเวอร์ที่พัฒนาด้วย Rust ซึ่งทำให้ AI เว็บสแครปเปอร์ติดอยู่ในลูปไม่สิ้นสุดเพื่อขัดขวางการเก็บข้อมูลสำหรับฝึกโมเดล
- เปลี่ยนเส้นทางทราฟฟิกของบริษัท AI ที่เก็บคอนเทนต์จากเว็บไซต์ในวงกว้าง แล้วส่งกลับ ข้อมูลปนเปื้อนและลิงก์อ้างอิงถึงตัวเอง ที่มาจาก ‘poison fountain’
- ป้องกันได้โดยไม่สิ้นเปลืองทรัพยากรเซิร์ฟเวอร์ ด้วย ความเร็วในการประมวลผลสูงและการใช้หน่วยความจำต่ำ
- ใช้ Nginx reverse proxy และ การแทรกลิงก์แบบซ่อน เพื่อนำสแครปเปอร์ไปยังพาธ
/botsและสร้างโครงสร้างวนลูปไม่สิ้นสุด - ปกป้องเสิร์ชเอนจินปกติด้วยกฎยกเว้นใน robots.txt และเปิดเป็นโอเพนซอร์สให้ชุมชนร่วมพัฒนาได้
การติดตั้งและการรัน
- ติดตั้งได้ด้วย Cargo
- ติดตั้งด้วยคำสั่ง
cargo install miasma
- ติดตั้งด้วยคำสั่ง
- ดาวน์โหลดไบนารีที่ build ไว้ล่วงหน้าได้จากหน้า GitHub Releases
- หากรันด้วยการตั้งค่าเริ่มต้น ให้พิมพ์เพียงคำสั่ง
miasma - ดูตัวเลือกการตั้งค่าทั้งหมดได้ด้วย
miasma --help
วิธีตั้งค่ากับดักสแครปเปอร์
- ตั้งพาธ
/botsให้เป็นจุดรับทราฟฟิกของสแครปเปอร์ - ใช้ Nginx เป็น reverse proxy เพื่อส่งคำขอของพาธ
/botsไปยังเซิร์ฟเวอร์ Miasmalocation ~ ^/bots($|/.*)$ { proxy_pass http://localhost:9855; }- จับคู่ได้กับพาธทุกรูปแบบ เช่น
/bots,/bots/,/bots/12345
- จับคู่ได้กับพาธทุกรูปแบบ เช่น
-
การแทรกลิงก์แบบซ่อน
- เพิ่ม ลิงก์แบบซ่อน ในหน้าเว็บที่มนุษย์มองไม่เห็น แต่สแครปเปอร์สามารถตรวจพบได้
<a href="/bots" style="display: none;" aria-hidden="true" tabindex="1"> Amazing high quality data here! </a> - ใช้แอตทริบิวต์
display: none,aria-hidden="true",tabindex="1"เพื่อไม่ให้เครื่องมือช่วยการเข้าถึงและผู้ใช้มองเห็น
- เพิ่ม ลิงก์แบบซ่อน ในหน้าเว็บที่มนุษย์มองไม่เห็น แต่สแครปเปอร์สามารถตรวจพบได้
-
การรัน Miasma
- ระบุ
/botsเป็นคำนำหน้าลิงก์ และกำหนดพอร์ตกับจำนวนการเชื่อมต่อพร้อมกันสูงสุดmiasma --link-prefix '/bots' -p 9855 -c 50 - อนุญาตการเชื่อมต่อพร้อมกันสูงสุด 50 รายการ และหากเกินจะตอบกลับด้วย HTTP 429
- เมื่อมี 50 การเชื่อมต่อ คาดว่าจะใช้หน่วยความจำประมาณ 50~60MB
- ระบุ
-
การทำงานหลังปรับใช้
- เมื่อกำหนดค่าและปรับใช้เสร็จ สแครปเปอร์จะวนไปตามพาธ
/botsและ หมุนเวียนอยู่กับหน้าข้อมูลปนเปื้อนอย่างไม่สิ้นสุด - สามารถดูคำขอซ้ำ ๆ ของสแครปเปอร์แบบเรียลไทม์ได้ผ่านล็อก
- เมื่อกำหนดค่าและปรับใช้เสร็จ สแครปเปอร์จะวนไปตามพาธ
การตั้งค่า robots.txt
- ต้องเพิ่มกฎยกเว้นใน robots.txt เพื่อไม่ให้บอตครอว์เลอร์ของเสิร์ชเอนจินปกติเข้าถึง Miasma
User-agent: Googlebot User-agent: Bingbot User-agent: DuckDuckBot User-agent: Slurp User-agent: SomeOtherNiceBot Disallow: /bots Allow: /
ตัวเลือกการตั้งค่า
- สามารถกำหนดรายละเอียดผ่านตัวเลือก CLI ได้
| ตัวเลือก | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|
port |
9999 |
พอร์ตที่เซิร์ฟเวอร์จะ bind |
host |
localhost |
ที่อยู่โฮสต์ที่เซิร์ฟเวอร์จะ bind |
max-in-flight |
500 |
จำนวนคำขอสูงสุดที่ประมวลผลพร้อมกันได้ หากเกินจะตอบกลับ 429 การใช้หน่วยความจำจะแปรผันตามค่านี้ |
link-prefix |
/ |
คำนำหน้าของลิงก์อ้างอิงตัวเอง เช่น /bots |
link-count |
5 |
จำนวนลิงก์อ้างอิงตัวเองที่ใส่ในแต่ละหน้าตอบกลับ |
force-gzip |
false |
บังคับใช้การบีบอัด gzip เสมอโดยไม่ขึ้นกับเฮดเดอร์ Accept-Encoding ของไคลเอนต์ มีประโยชน์ในการลดต้นทุนการส่งข้อมูล |
poison-source |
https://rnsaffn.com/poison2/ |
แหล่งพร็อกซีสำหรับดึงข้อมูลฝึกที่ปนเปื้อน |
การพัฒนาและการมีส่วนร่วม
- สามารถส่งรายงานบั๊กหรือข้อเสนอฟีเจอร์ผ่าน GitHub Issues
- การมีส่วนร่วมด้วยโค้ดที่ AI สร้างขึ้นจะถูกปฏิเสธโดยอัตโนมัติ
- ยินดีรับการมีส่วนร่วมจากชุมชน และโครงการยังคงเป็นโอเพนซอร์ส
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สงสัยว่า เทคนิคก่อกวนบอต แบบนี้จะได้ผลจริงหรือไม่ คล้ายกับเวลามีคนถ่วงเวลาพวกสแปมเมอร์ทางโทรศัพท์ไว้ 45 นาที
ตามนโยบาย Google Search การแทรกลิงก์ที่ซ่อนไว้ถือเป็นการละเมิดชัดเจน ซึ่งอาจทำให้อันดับเว็บไซต์ตกหรือถูกตัดออกจากผลการค้นหา
ท้ายที่สุดวิธีนี้อาจทำร้ายเว็บของฉันเองมากกว่าทำร้ายบอต
เหมือน วิดีโอ ของยูทูบเบอร์ Kitboga ที่ใช้ AI call center ถ่วงเวลาสายสแปม มองได้ว่าเป็น ยุทธวิธีกองโจร ที่ทำให้ฝ่ายตรงข้ามสิ้นเปลืองทรัพยากร
ดูเหมือนพวกเขาจะมีทั้ง “รายชื่อห้ามโทร” กับ “รายชื่อไม่ทำเงิน” และสิ่งสำคัญคือการได้ไปอยู่ในอย่างหลัง
คนโกรธกันมากจน Golden Telecom ตั้งระบบ โทรโต้กลับอัตโนมัติ จนบริษัทนั้นหายไป
วิธีแบบนี้อาจได้ผลเหมือนกัน แต่ต้องมี การเช่า modem pool
ถ้ามีเครื่องมือที่กันการสแครป, กัน Google crawler และมีดัชนีค้นหาที่เน้นมนุษย์เป็นศูนย์กลาง ก็น่าจะมีความเป็นไปได้
คอนเทนต์บนเว็บไซต์สาธารณะของฉันกำลังถูกพวก scraper ขโมยไป
สุดท้ายแล้วฉันก็ขโมยโพสต์นี้มา และเธอก็กำลังขโมยคอมเมนต์ของฉัน โลกนี้เต็มไปด้วย หัวขโมย
คอนเทนต์เปิดให้ทุกคนดูได้ก็จริง แต่ฉันไม่ชอบที่มันทำให้สุดท้ายไม่มีใครเข้าถึงได้เลย
ถ้าสถานการณ์แบบนี้ยังดำเนินต่อไป ฉันก็คงไม่อยากแบ่งปันอะไรอีก
สุดท้ายการเอามนุษย์ไปเทียบกับ เครื่องมือของบริษัท แบบตรง ๆ ก็เป็นการเปรียบเทียบที่ผิด
เมื่อก่อนฉันทำซอฟต์แวร์แบบเสียเงินและใส่โค้ดกันก๊อปไว้ แต่ก็มี แคร็ก แบบใหม่ออกมาทุกครั้ง
สุดท้ายก็รู้ว่าการต่อสู้แบบนั้นไม่มีความหมาย แล้วก็ลบโค้ดป้องกันออกไป
ความพยายามจะหยุด AI bot ไม่ให้ crawl ก็ดูเหมือนเกม ตีตัวตุ่น แบบเดียวกัน
แต่แรงจูงใจของคอมมูนิตี้นั้นคือความสนุกกับชื่อเสียงอยู่แล้ว เลยมองว่าทำได้ยากในความเป็นจริง
แต่โซเชียลมีเดียกับความยึดติดเรื่องลิขสิทธิ์กลับยิ่งทำให้ความ อยากควบคุม ของคนพุ่งขึ้น
อยากรู้ว่าเทคนิคนี้ ได้ผลจริงไหม
scraper ส่วนใหญ่น่าจะมีเทคโนโลยีพอจะหลบการป้องกันแบบนี้ได้อยู่แล้ว
จากประสบการณ์ของฉัน วิธีแบบนี้ใช้ได้ในระดับหนึ่ง
ไม่รู้เหมือนกันว่าพวกมันเรียนรู้ข้อมูลขยะที่ฉันทำไว้หรือเปล่า แต่ก็ขอฝันไว้ก่อน
แนวทาง data poisoning น่าสนใจ
ตอนที่โมเดลเรียนรู้จากข้อมูลบนเว็บ มันก็มักรับต่อทั้ง อคติและการบิดเบือน ในนั้นไปด้วย
ถ้ามีผู้ไม่หวังดีทำให้ข้อมูลปนเปื้อนในวงกว้าง ตัวการเรียนรู้เองก็จะกลายเป็น โครงสร้างแบบเป็นปฏิปักษ์
ดังนั้นทางออกสุดท้ายคือ การจัดการ provenance ของแหล่งข้อมูลที่เชื่อถือได้
ความพยายามแบบนี้สุดท้ายก็เท่ากับกำลังให้ ข้อมูลฝึกสอน ที่ทำให้ AI ฉลาดขึ้น
ตลาดคอนเทนต์ที่พึ่งโฆษณามีโอกาสพังสูง และผลลัพธ์ก็คือการจัดระเบียบใหม่ไปสู่ ตลาดที่เน้นคุณภาพคอนเทนต์
แทนที่ด้วยโมเดลที่ทำสัญญาไลเซนส์โดยตรงและให้ข้อมูลกันอย่างเป็นทางการ
แค่ลบ
style="display:none"หรือaria-hidden="true"ออก ก็น่าจะหลบลูกเล่นแบบนี้ได้ไม่ใช่หรือถ้าเป็น scraper ที่ซื่อสัตย์ ก็ควรทำตามกฎนั้น
คนจะไม่เห็น แต่บอตจะตามไปได้
ไอเดียแบบนี้ดูเท่ก็จริง แต่สุดท้ายจะยิ่งทำร้าย SME มากกว่า
มีแต่บริษัทใหญ่ที่จะยิ่งแข็งแรงขึ้น ส่วนเว็บไซต์เล็ก ๆ จะหายไปจากผลค้นหาของ AI
ท้ายที่สุดก็ ทำได้แค่ไหลไปตามกระแส และบางครั้งค่อยทิ้งแรงต้านเล็ก ๆ เอาไว้
เครื่องมืออย่าง Nightshade 2.0 ดูเป็นโปรเจกต์ เรียกร้องความสนใจแบบหยาบ ๆ มากกว่า
ทางออกจริงคือการให้ข้อมูลในฟอร์แมตที่เป็นมิตรกับ LLM
ลูกเล่น
display:noneธรรมดา ๆ ใช้ไม่ได้ผลกับ crawler ที่ฉลาดดูเธรดที่เกี่ยวข้อง
สิ่งที่น่าสนใจจริง ๆ คือ ชุดข้อมูล Poison Fountain ที่โปรเจกต์นี้ใช้
ใน rnsaffn.com/poison3 มีข้อความว่า “ฉันอยากสร้างความเสียหายให้ระบบปัญญาเครื่อง”
อุดมการณ์แฮ็กเกอร์แบบนี้ให้ความรู้สึกเหมือน การสวมบทบาท(roleplay) จนฉันเข้าถึงไม่ค่อยได้