การลบการแก้ไขสแปมจำนวนมากใน Mediawiki


15

โดยทั่วไปตัวอย่าง 'มีเดียวิกิ' ส่วนตัวของฉันนั้นปลอดภัยพอ ๆ กับกระปุกออมสิน ตอนนี้ฉันได้ทำให้มันแน่นขึ้น แต่ฉันเหลือหน้าใหม่ประมาณร้อยหน้าขึ้นไปและการแก้ไขที่สร้างโดยผู้ใช้ที่สร้างขึ้นแบบสุ่มหลายร้อยคน

คำถาม 2 ส่วน; มีวิธีลบหน้าเด็กกำพร้าทั้งหมดหรือไม่ ฉันสามารถพูดย้อนกลับการแก้ไขทั้งหมดที่ไม่ได้ทำโดยผู้ใช้คนใดคนหนึ่ง (ฉัน) ได้หรือไม่?


mediawiki.org/wiki/Manual:Combating_vandalismและmediawiki.org/wiki/Manual:Combating_spamเป็นแหล่งที่เป็นที่ยอมรับ แต่ยังมีงานที่ดำเนินการต่อไป: phabricator.wikimedia.org/T90238
Nemo

ฉันไม่มีปัญหากับเว็บไซต์ mediawiki ของฉันอีกต่อไป หากคุณยังมีปัญหานี้ตอบสนองต่อความคิดเห็นของฉันและฉันสามารถแสดงให้คุณเห็นในสตรีมสดว่าฉันจะแก้ไขปัญหาเหล่านี้ได้อย่างไร
je Unblocksays

คำตอบ:


19

หากคุณไม่ต้องการใช้วิธีการส่งออกและติดตั้งใหม่ แนะนำโดย danlefreeคุณอาจพบว่าส่วนขยายNukeมีประโยชน์เช่นกัน เมื่อติดตั้งแล้วให้ไปที่หน้าพิเศษพิเศษ: Nuke ในฐานะผู้ดูแลระบบให้แบบฟอร์มดังนี้:

สกรีนช็อตของส่วนต่อขยาย MediaWiki Nuke

นอกจากนี้ยังมีสคริปต์บำรุงรักษา MediaWiki ในตัวหลายตัวที่อาจมีประโยชน์ซึ่งรวมถึง:

  • cleanupSpam.phpซึ่งสามารถใช้ในการย้อนกลับและ / หรือลบการแก้ไขทั้งหมดที่มีลิงก์ไปยังชื่อโฮสต์เฉพาะ

  • deleteBatch.phpซึ่งสามารถใช้เพื่อลบหน้าทั้งหมดที่ระบุไว้ในไฟล์และ

  • rollbackEdits.php (ซึ่งปัจจุบันดูเหมือนจะไม่มีเอกสารประกอบแบบ on-wiki ที่เหมาะสม) ซึ่งสามารถใช้เพื่อย้อนกลับการแก้ไขทั้งหมดของผู้ใช้ที่ระบุ


การล้างสแปมโดยใช้การเข้าถึงฐานข้อมูลโดยตรง

คุณสามารถทำสิ่งที่คุณต้องการโดยจัดการฐานข้อมูลโดยตรง มีรายละเอียดอาจแตกต่างกันเล็กน้อยขึ้นอยู่กับสถานการณ์ของคุณ แต่ขั้นตอนพื้นฐานจะเป็นดังนี้:

  1. ตั้งวิกิพีเดียของคุณไปยังโหมดอ่านอย่างเดียว คุณไม่ต้องการให้ใครลองแก้ไขวิกิในขณะที่คุณกำลังยุ่งกับฐานข้อมูล

  2. สำรองข้อมูลวิกิของคุณ (แนะนำอย่างยิ่งก่อนการลบมวลที่ไม่สามารถย้อนกลับได้)

  3. ลบบัญชีผู้ใช้ทั้งหมดที่สร้างโดยผู้ส่งอีเมลขยะ หากในคำถามข้างต้นคุณเป็นผู้ใช้ที่ถูกต้องคุณสามารถทำได้:

    DELETE FROM user WHERE user_id != YOUR_USER_ID;

    อีกทางหนึ่งหากไม่มีบัญชีที่ถูกต้องใหม่ถูกสร้างขึ้นหลังจากผู้ส่งอีเมลขยะค้นพบวิกิคุณสามารถค้นหาหมายเลข ID ผู้ใช้ที่ถูกต้องสูงสุดและทำ:

    DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;

    หรือคุณสามารถใช้เครื่องมือผู้ดูแลระบบเช่น phpMyAdmin เพื่อเลือกบัญชีที่ถูกต้องและลบที่เหลือ

  4. ล้างข้อมูลเพิ่มเติมที่เกี่ยวข้องกับบัญชีที่ถูกลบ นี่ไม่ใช่สิ่งที่จำเป็นอย่างเคร่งครัด แต่ระเบียนที่ถูกโยงถึงเหล่านั้นไม่มีประโยชน์และจะทำให้ฐานข้อมูลของคุณยุ่งเหยิงหากคุณไม่ได้ลบทิ้ง:

    DELETE FROM user_groups WHERE ug_user NOT IN (SELECT user_id FROM user);
    DELETE FROM user_properties WHERE up_user NOT IN (SELECT user_id FROM user);
    DELETE FROM user_newtalk WHERE user_id NOT IN (SELECT user_id FROM user);
  5. ลบการแก้ไขใด ๆ ที่ไม่ได้ทำโดยผู้ใช้ที่ถูกต้อง:

    นี่คือขั้นตอนใหญ่ ทุกอย่างก่อนที่มันจะถูกเตรียมทุกอย่างหลังจากมันคือการทำความสะอาด ด้วยการลบบัญชีสแปมทั้งหมดคุณสามารถทำได้:

    DELETE FROM revision WHERE rev_user > 0 AND rev_user NOT IN (SELECT user_id FROM user);

    หากวิกิของคุณปิดใช้งานการแก้ไขแบบไม่ระบุชื่อ (ซึ่งฉันขอแนะนำอย่างยิ่งสำหรับส่วนตัว / ทดสอบวิกิ) แบบสอบถามข้างต้นควรเพียงพอที่จะกำจัดการแก้ไขสแปมทั้งหมด อย่างไรก็ตามหากคุณเปิดใช้งานการแก้ไขแบบไม่ต่อเนื่องคุณจะต้องดักฟังสแปมที่ไม่ระบุตัวตนแยกจากกัน

    ถ้าคุณแน่ใจว่าทุกแก้ไขอานนท์ในวิกิพีเดียของคุณเป็นสแปม, การแก้ไขเพียงทำโดยโพสต์ 0 ที่เราอาจจะต้องรักษาความเป็นผู้ที่ทำหน้าที่โยงตัวเอง (เช่นหน้านำเข้าจากนอกวิกิพีเดีย) ในกรณีดังกล่าวบางสิ่งเช่นแบบสอบถามต่อไปนี้ควรใช้งานได้:

    DELETE FROM revision WHERE rev_user = 0 AND rev_user_text BETWEEN '1' AND '999';

    การดำเนินการนี้จะลบการแก้ไขใด ๆ ด้วย UID 0 ที่ชื่อผู้ใช้มีลักษณะคล้ายกับที่อยู่ IPv4 นั่นคือมันเริ่มต้นด้วยตัวเลขระหว่าง 1 ถึง 9

    หากวิกิของคุณมีการแก้ไขที่ไม่ถูกต้องตามกฎหมายคุณอาจต้องสร้างสรรค์มากขึ้น หากจำนวนที่อยู่ IP ที่ใช้โดยผู้แก้ไขที่ไม่ได้ลงทะเบียนถูกต้องตามกฎหมายมี จำกัด คุณสามารถเพิ่มข้อเช่นAND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')ในแบบสอบถามด้านบนเพื่อแยกการมีส่วนร่วมของ IP เหล่านั้นออกจากการลบ นอกจากนี้คุณยังสามารถเพิ่มเงื่อนไขเช่นพูดAND rev_user_text NOT LIKE '192.168.%'เพื่อบันทึกการแก้ไขทั้งหมดจากที่อยู่ IP ที่ขึ้นต้นด้วยคำนำหน้าเฉพาะ

  6. ข้อความค้นหาข้างต้นจะกำจัดการแก้ไขสแปม (แม้ว่าเนื้อหาจะยังคงอยู่ในtextตาราง) แต่จะออกจากpage_latestฟิลด์ของหน้าเว็บที่ได้รับผลกระทบใด ๆ ที่ชี้ไปยังการแก้ไขที่ไม่มีอยู่ นี่อาจทำให้เกิดความสับสนดังนั้นเราควรแก้ไขให้ดีกว่า

    ก่อนอื่นเราต้องลบpage_latestคอลัมน์สำหรับทุกหน้า:

    UPDATE page SET page_latest = 0;
  7. ต่อไปเราจะสร้างคอลัมน์ใหม่โดยเรียกใช้สคริปต์การบำรุงรักษาattachLatest.php (แนะนำให้อย่าลืมใช้--fixพารามิเตอร์เพื่อให้สคริปต์เปลี่ยนฐานข้อมูลจริง ๆ ) หรือด้วยการสืบค้น SQL แบบแมนนวล:

    UPDATE page SET page_latest =
        (SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
  8. สุดท้ายเราจะลบหน้าทั้งหมดที่ไม่พบการแก้ไขที่ถูกต้อง (เพราะถูกสร้างโดยผู้ส่งอีเมลขยะและไม่เคยมีเนื้อหาที่ถูกต้อง):

    DELETE FROM page WHERE page_latest = 0;
  9. สำหรับการสัมผัสครั้งสุดท้ายให้สร้างลิงค์ดัชนีข้อความและตารางการเปลี่ยนแปลงล่าสุดโดยรันสคริปต์การบำรุงรักษาrebuildall.php คุณอาจต้องการลบเนื้อหาของการแก้ไขสแปมที่ถูกลบออกจากฐานข้อมูลเพื่อไม่ให้มีพื้นที่ไม่จำเป็นโดยการรันสคริปต์บำรุงรักษาpurgeOldText.php

เมื่อทำเสร็จแล้วให้ตรวจสอบว่าทุกอย่างดูดีและหากเป็นเช่นนั้นให้ปิดโหมดอ่านอย่างเดียวหวังว่าหลังจากติดตั้งฟีเจอร์ป้องกันสแปมแล้วเพื่อป้องกันไม่ให้เกิดปัญหาซ้ำอีก

สำหรับวิกิขนาดเล็กฉันขอแนะนำส่วนขยายQuestyCaptchaซึ่งช่วยให้คุณกำหนดค่า CAPTCHA แบบข้อความที่กำหนดเองได้อย่างง่ายดาย เคล็ดลับคือเมื่อทุกวิกิมีชุดคำถามของตัวเองการเขียนโปรแกรมสแปมบอทเพื่อตอบคำถามอย่างถูกต้องจะเป็นงานจำนวนมากเพื่อผลประโยชน์ที่น้อยมาก ฉันติดตั้งไว้ในวิกิของตัวเองหลังจากโดนXRumer เข้ามาเข้ามาสองสามครั้งและไม่เคยเห็นสแปมมาก่อน

ps ฉันได้ใช้คำแนะนำเหล่านี้เพื่อ nuke ประมาณ 35,000 แก้ไขสแปมที่สร้างขึ้นโดยผู้ใช้หลายคนอย่างเท่าเทียมกันจากวิกิพีเดียเล็กทุกอย่างเป็นไปด้วยดี ในกรณีพิเศษนี้ wiki (โชคดี!) ไม่อนุญาตให้มีการแก้ไขแบบไม่ระบุชื่อและผู้ใช้ที่ถูกต้องเกือบทั้งหมดถูกสร้างขึ้นก่อนที่ผู้ส่งอีเมลขยะจะพบ wiki ดังนั้นฉันจึงสามารถลบบัญชีสแปมทั้งหมดก่อนแล้วจึงทำการแก้ไขทั้งหมด พวกเขาต้องการสร้าง (ฉันลบบัญชีที่ถูกต้องครั้งแรกโดยบังเอิญโดยไม่ตั้งใจดังนั้นฉันจึงต้องเรียกคืนจากการสำรองข้อมูลและทำซ้ำขั้นตอนอย่างระมัดระวังมากขึ้น) ฉันได้อัปเดตคำแนะนำด้านบนเพื่อให้สะท้อนถึงสิ่งที่จริง ๆ แล้วฉันก็ทำได้ดีขึ้น .


คำถามนี้มีอายุสองสามปีก็ยังดูเหมือนว่าจะทำงานได้ดีใน wiki ขนาดเล็กที่มีสแปมบอท 100,000 ตัว สิ่งต่าง ๆ มีการเปลี่ยนแปลงตั้งแต่นั้นมา; อาจมีขั้นตอนเพิ่มเติมหรือไม่
Ant6n

ข่าวบางอย่างที่นี่? นี่คือ "แนวปฏิบัติที่ดีที่สุด" และ "เครื่องมือที่ดีที่สุด" ในปัจจุบันใช่ไหม
Peter Krauss

rebuildall.phpไม่ได้อยู่ในการบำรุงรักษา: O มิฉะนั้นขอบคุณ
Jamie Hutber

5

วิธีที่ง่ายที่สุดในการจัดการกับสถานการณ์นี้ (ถ้าคุณไม่สนใจ nuke'n'pave) คือการส่งออกหน้า wiki ทั้งหมดที่สร้างหรือแก้ไขโดยชื่อผู้ใช้ของคุณติดตั้ง wiki ใหม่และนำเข้าไฟล์ส่งออกที่คุณสร้างขึ้น

"ติดตั้งใหม่" ในบริบทนี้จะหมายถึง:

  1. ส่งออกบทความที่คุณสร้างขึ้น (สันนิษฐานว่าเป็นผู้ใช้ WikiSysop หรือคล้ายกัน)
  2. ปล่อยฐานข้อมูล MW
  3. สร้างฐานข้อมูล MW ว่างเปล่า
  4. คัดลอกLocalSettings.phpไฟล์ของคุณไปยังตำแหน่งที่ปลอดภัย
  5. อัปโหลด/config/ไดเรกทอรีอีกครั้ง
  6. เรียกใช้กระบวนการติดตั้งบนฐานข้อมูล MW ใหม่ (โปรดทราบว่าคุณจะต้องการสร้างผู้ใช้ผู้ดูแลระบบเก่าของคุณใหม่)
  7. ลบ/config/ไดเรกทอรีและย้ายไฟล์เก่าของคุณLocalSettings.phpไฟล์กลับไปที่รูท MW
  8. นำเข้าไฟล์ที่สร้างขึ้นในขั้นตอนที่ 1

แก้ไข:คุณอาจต้องการดึงข้อมูลสำรองฐานข้อมูล (รวมถึงการแก้ไขสแปม) ในกรณีที่คุณพบปัญหาใด ๆ กับกระบวนการนี้หรือต้องการทดลองด้วยวิธีอื่นในการกำจัดสแปม


2

ในทางทฤษฎีคุณสามารถเขียนส่วนขยาย MediaWiki เพื่อทำสิ่งที่คุณต้องการกับอินสแตนซ์ MediaWiki รวมถึงทำสิ่งที่คุณกล่าวถึง

สั้น ๆ จากนั้นและย่อมาจาก "nuke'n'pave" ที่แนะนำโดย danlefree คุณอาจพบว่าส่วนขยายผู้ใช้รวมและลบมีประโยชน์: คุณสามารถใช้เพื่อรวมบัญชีสแปมบอทหลายบัญชีไว้ในบัญชีเดียวที่สามารถแก้ไขเพิ่มเติมได้อีก อย่างง่ายดาย


2

วิธีที่ง่ายที่สุดในการจัดการกับสถานการณ์นี้คือการติดตั้งส่วนขยายDeleteBatch ใช้พิเศษ: AllPages บนวิกิของคุณเพื่อรับไฟล์สคริปต์ของชื่อเพจที่คุณต้องการลบและโหลดลงในพิเศษ: DeleteBatch


1

หากเป็นเพียงหนึ่งร้อยหน้าสแปมที่คุณไม่ได้ทำไม่ดีเกินไป ฉันต้องทำความสะอาดวิกิที่มีหน้าสแปมนับพันหน้า ฉันได้พบกับเคล็ดลับดีๆจากผู้ใช้: Halz ในหน้านี้: https://www.mediawiki.org/wiki/User:Halz/Mass_despammingรวมถึงการแบ่งข้อ จำกัด ของเครื่องมือต่างๆ

ที่ด้านล่างเขาได้ให้แบบสอบถาม SQL ที่มีประโยชน์ซึ่งทำงานช้าลงเล็กน้อย แต่ช่วยให้คุณค้นหาหน้าเว็บที่มีแนวโน้มว่าเป็นสแปมโดยเฉพาะอย่างยิ่งถ้าคุณสามารถระบุช่วงเวลาที่วิกินั้นถูกยึดครองโดยผู้ส่งอีเมลขยะ นอกจากนี้ Halz ยังมีส่วนขยายแฮ็ครุ่นนามสกุล: Nuke ซึ่งนำเสนอพารามิเตอร์ที่สามารถสืบค้นได้เหล่านี้เพื่อการลบมวลอย่างง่ายดาย เขามอบสำเนาให้ฉันใช้ แต่ฉันไม่คิดว่าเขาจะเผยแพร่


1

ฉันขอแนะนำไม่ให้ยุ่งกับ SQL ของ MediaWiki! MediaWiki เป็นสัตว์ร้ายที่มีความซับซ้อนเหมาะอย่างยิ่งสำหรับ Wikipedia มีสิ่งแปลก ๆ เกิดขึ้นใน SQL และถ้าคุณเพียงแค่ลบสิ่งที่แถวอาจหลวมความสอดคล้อง

หากคุณมีทักษะการเขียนโปรแกรมให้ผ่าน API Pywikibotเป็นทางเลือกที่ดี

มิฉะนั้นตรวจสอบเครื่องมือในmaintenance/ไดเรกทอรี คุณอาจจะลองใช้เครื่องมือของตัวเองmewshการช่วยเหลือเกี่ยวกับการที่ (และฉันเพิ่งเพิ่ม "เครื่องมือป้องกันสแปม" เป็นสิ่งที่ต้องทำที่นั่น)


0

ผมเอาไปติดตั้งและพบว่ามากกว่า 47,000 รายการสแปมในuserตารางและเกือบ 900,000 externallinksสแปม ฉันใช้Sequel Proและเยี่ยมชมแต่ละตารางและลบรายการที่ไม่ได้ทำโดยผู้ใช้ที่แท้จริง ผมพบว่าสแปมในexternallinks, page, searchindex, ,user watchlistมันค่อนข้างมีประสิทธิภาพเวลา; กลุ่มเวลาของฉันกำลังรอให้ลบคิวรีเพื่อเรียกใช้ ฉันโชคดีเพราะการแก้ไขที่แท้จริงส่วนใหญ่เกิดขึ้นในลำดับต้น ๆ


2
ไม่มีจุดในการพยายามลบลิงก์สแปมออกexternallinksเนื่องจากเป็นตารางเมทาดาทาที่ซ้ำซ้อนซึ่งโดยทั่วไปจะใช้สำหรับสิ่งต่าง ๆ เช่นพิเศษ: LinkSearch; เมื่อคุณล้างข้อมูลหน้าจริงแล้วคุณสามารถเรียกใช้rebuildall.phpเพื่อล้างข้อมูลและสร้างใหม่ searchindexเช่นเดียวกันสำหรับ
Ilmari Karonen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.