Penghapusan massal revisi spam di Mediawiki

15

Pada dasarnya contoh mediawiki 'pribadi' saya adalah seaman babi celengan. Saya telah memperketatnya sekarang, tetapi saya memiliki sekitar seratus halaman baru dan revisi yang dihasilkan oleh ratusan pengguna yang dibuat secara acak.

2 bagian pertanyaan; Apakah ada cara untuk menghapus semua halaman yatim? Dapatkah saya mengatakan untuk membatalkan semua revisi TIDAK yang dilakukan oleh pengguna tertentu (saya)?

Andrew Bolster
sumber
mediawiki.org/wiki/Manual:Combating_vandalism dan mediawiki.org/wiki/Manual:Combating_spam adalah sumber kanonik tetapi masih banyak pekerjaan yang sedang dilakukan: phabricator.wikimedia.org/T90238
Nemo
Saya tidak memiliki masalah dengan situs web mediawiki saya lagi. Jika Anda masih memiliki masalah ini menanggapi komentar saya dan saya dapat menunjukkan kepada Anda di live streaming bagaimana saya memperbaiki masalah ini.
jehovahsays

Jawaban:

19

Jika Anda tidak ingin menggunakan metode ekspor-dan-instal ulang yang disarankan oleh danlefree , Anda mungkin juga menemukan ekstensi Nuke bermanfaat. Setelah terinstal, kunjungi halaman khusus Special: Nuke sebagai administrator memberi Anda formulir seperti ini:

Cuplikan layar antarmuka ekstensi MediaWiki Nuke

Ada juga beberapa skrip pemeliharaan MediaWiki bawaan yang dapat berguna, termasuk:

  • cleanupSpam.php , yang dapat digunakan untuk mengembalikan dan / atau menghapus semua revisi yang berisi tautan ke nama host tertentu,

  • deleteBatch.php , yang dapat digunakan untuk menghapus semua halaman yang tercantum dalam file, dan

  • rollbackEdits.php (yang saat ini tampaknya tidak memiliki dokumentasi on-wiki yang tepat), yang dapat digunakan untuk memutar kembali semua pengeditan pengguna yang ditentukan.


Pembersihan spam menggunakan akses basis data langsung

Dimungkinkan juga untuk melakukan apa yang Anda inginkan dengan secara langsung memanipulasi basis data. Detail di sana dapat sedikit berbeda tergantung pada situasi Anda, tetapi langkah-langkah dasarnya akan seperti ini:

  1. Atur wiki Anda ke mode hanya baca . Anda tidak ingin seseorang mencoba mengedit wiki saat Anda mengacaukan basis data.

  2. Buat cadangan untuk wiki Anda. (Ini sangat disarankan sebelum penghapusan massal yang tidak dapat dibatalkan.)

  3. Hapus semua akun pengguna yang dibuat oleh spammer. Jika, seperti pada pertanyaan di atas, Anda adalah satu-satunya pengguna yang valid, Anda bisa melakukan:

    DELETE FROM user WHERE user_id != YOUR_USER_ID;

    Atau, jika tidak ada akun valid yang baru dibuat setelah spammer menemukan wiki, Anda dapat menemukan nomor ID pengguna tertinggi yang valid dan lakukan:

    DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;

    Atau Anda dapat menggunakan alat admin seperti phpMyAdmin untuk secara manual memilih akun yang valid dan menghapus sisanya.

  4. Bersihkan data tambahan yang terkait dengan akun yang dihapus. Ini tidak sepenuhnya diperlukan, tetapi catatan yatim itu tidak digunakan dan hanya akan mengacaukan basis data Anda jika Anda tidak menghapusnya:

    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. Hapus semua revisi yang tidak dilakukan oleh pengguna yang valid:

    Ini adalah langkah besar; semuanya sebelum persiapan, semuanya setelah pembersihan. Dengan semua akun spam dihapus, Anda bisa melakukan:

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

    Jika wiki Anda telah menonaktifkan penyuntingan anonim (yang saya sangat sarankan untuk wiki pribadi / uji), pertanyaan di atas harus cukup untuk menyingkirkan semua revisi spam. Namun, jika Anda mengaktifkan penyuntingan langsung, Anda harus menghapus spam anonim secara terpisah.

    Jika Anda yakin bahwa semua suntingan pada wiki Anda adalah spam, satu-satunya suntingan yang dibuat oleh UID 0 yang mungkin perlu kami pertahankan adalah yang dibuat oleh MediaWiki sendiri (seperti halaman yang diimpor dari luar wiki). Dalam hal itu, sesuatu seperti kueri berikut harus berfungsi:

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

    Ini akan menghapus revisi apa pun oleh UID 0 di mana nama pengguna terlihat (samar-samar) seperti alamat IPv4; yaitu dimulai dengan angka antara 1 dan 9.

    Jika wiki Anda memiliki beberapa suntingan langsung yang sah, Anda mungkin harus sedikit lebih kreatif. Jika jumlah alamat IP yang digunakan oleh editor tidak terdaftar yang sah terbatas, Anda bisa menambahkan klausa seperti AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')pada kueri di atas untuk mengecualikan kontribusi oleh IP tersebut dari penghapusan. Anda juga dapat menambahkan kondisi seperti, misalnya, AND rev_user_text NOT LIKE '192.168.%'untuk menyimpan semua pengeditan dari alamat IP yang diawali dengan awalan tertentu.

  6. Kueri di atas akan menyingkirkan revisi spam (meskipun kontennya akan tetap ada di texttabel), tetapi akan meninggalkan page_latestbidang halaman yang terpengaruh yang mengarah ke revisi yang tidak ada. Ini dapat menyebabkan kebingungan, jadi sebaiknya kita perbaiki.

    Pertama, kita perlu menghapus page_latestkolom untuk semua halaman:

    UPDATE page SET page_latest = 0;
  7. Selanjutnya, kita akan membangun kembali kolom, baik dengan menjalankan skrip pemeliharaan attachLatest.php (disarankan; ingatlah untuk menggunakan --fixparameter sehingga skrip benar-benar mengubah database) atau dengan kueri SQL manual:

    UPDATE page SET page_latest =
        (SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
  8. Terakhir, kami akan menghapus semua halaman yang tidak dapat ditemukan revisi yang valid (karena dibuat oleh pengirim spam, dan tidak pernah memiliki konten yang valid):

    DELETE FROM page WHERE page_latest = 0;
  9. Untuk sentuhan terakhir, buat kembali tautan, indeks teks dan tabel perubahan terbaru dengan menjalankan skrip pemeliharaan rebuildall.php . Anda juga mungkin ingin menghapus konten revisi spam yang dihapus dari database, sehingga mereka tidak akan mengambil ruang yang tidak perlu di sana, dengan menjalankan skrip pemeliharaan purgeOldText.php .

Setelah semuanya selesai, periksa apakah semuanya terlihat baik, dan jika demikian, matikan mode read-only - semoga setelah menginstal beberapa fitur anti-spam untuk mencegah masalah terulang kembali.

Untuk wiki kecil, saya sangat merekomendasikan ekstensi QuestyCaptcha , yang memungkinkan Anda untuk mengkonfigurasi CAPTCHA berbasis teks kustom sederhana. Kuncinya adalah bahwa, dengan setiap wiki memiliki set pertanyaan sendiri, memprogram spambot untuk menjawabnya dengan benar akan menjadi banyak pekerjaan untuk mendapatkan sangat sedikit. Saya menginstalnya di wiki saya sendiri setelah terkena XRumer beberapa kali, dan sejak itu tidak melihat spam.

Ps. Saya telah menggunakan instruksi ini untuk mengeluarkan sekitar 35.000 revisi spam yang dibuat oleh banyak pengguna dari wiki kecil . Semuanya baik-baik saja. Dalam kasus khusus ini, wiki (untungnya!) Tidak mengizinkan pengeditan anonim, dan hampir semua pengguna yang sah dibuat sebelum spammer menemukan wiki, jadi saya bisa dengan mudah menghapus semua akun spam terlebih dahulu, dan kemudian semua revisi mereka telah menciptakan. (Saya tidak sengaja menghapus satu akun yang sah pada awalnya, jadi saya harus memulihkan dari cadangan dan mengulang proses lebih hati-hati.) Saya telah memperbarui instruksi di atas untuk lebih mencerminkan apa yang akhirnya saya lakukan, dan menjadi sedikit lebih generik .

Ilmari Karonen
sumber
Pertanyaan ini sudah berumur beberapa tahun, sepertinya masih berfungsi dengan baik pada wiki kecil yang telah mengakumulasi 100.000 bot spam. Adakah yang berubah sejak saat itu; apakah mungkin ada langkah tambahan?
Ant6n
Ada berita di sini? Ini adalah "praktik terbaik" dan "alat terbaik" di zaman sekarang?
Peter Krauss
rebuildall.phptidak dalam pemeliharaan: O Jika tidak, terima kasih
Jamie Hutber
5

Cara termudah untuk menangani situasi ini (jika Anda tidak keberatan memiliki nuke'n'pave) adalah dengan mengekspor semua halaman wiki yang dibuat atau diedit oleh nama pengguna Anda, instal ulang wiki, dan impor file ekspor yang Anda buat.

"Instal ulang" dalam konteks ini berarti:

  1. Ekspor artikel yang dibuat oleh Anda (mungkin login sebagai pengguna WikiSysop atau serupa)
  2. Jatuhkan basis data MW
  3. Buat database MW kosong
  4. Salin LocalSettings.phpfile Anda ke lokasi yang aman
  5. Unggah ulang /config/direktori
  6. Jalankan proses instalasi pada basis data MW baru (perhatikan bahwa Anda ingin membuat kembali pengguna admin lama Anda)
  7. Hapus /config/direktori dan pindahkan LocalSettings.phpfile lama Anda kembali ke root MW
  8. Impor file yang dibuat pada Langkah # 1

Sunting: Anda mungkin ingin menarik cadangan basis data (termasuk revisi spam) jika Anda menghadapi masalah dengan proses ini atau ingin bereksperimen dengan cara-cara alternatif untuk membersihkan spam.

danlefree
sumber
2

Secara teori, Anda bisa menulis ekstensi MediaWiki untuk melakukan apa pun yang Anda suka ke instance MediaWiki, termasuk untuk melakukan hal-hal yang Anda sebutkan.

Singkatnya, dan kependekan dari "nuke'n'pave" yang disarankan oleh danlefree, Anda mungkin menemukan ekstensi Penggabungan dan Hapus Pengguna berguna: Anda dapat menggunakannya untuk mengkonsolidasikan beberapa akun spambot ke dalam satu akun yang pengeditannya dapat diatasi lebih lanjut dengan mudah.

sampablokuper
sumber
2

Cara termudah untuk menangani situasi ini adalah menginstal ekstensi DeleteBatch . Gunakan Special: AllPages di wiki Anda untuk mendapatkan file skrip dari nama halaman yang ingin Anda hapus, dan memuatnya ke Special: DeleteBatch.

Rob Kam
sumber
1

Jika hanya seratus halaman spam, Anda tidak melakukannya dengan buruk. Saya harus membersihkan wiki yang memiliki ribuan halaman spam. Saya menemukan beberapa tips bagus oleh Pengguna: Halz di halaman ini: https://www.mediawiki.org/wiki/User:Halz/Mass_despamming termasuk rincian batasan berbagai alat.

Di bagian bawah dia menyediakan kueri SQL berguna yang berjalan agak lambat tetapi membantu Anda menemukan halaman yang kemungkinan besar merupakan spam, terutama jika Anda dapat mengidentifikasi periode waktu ketika wiki diambil alih oleh spammer. Halz juga memiliki versi Ekstensi yang diretas: Nuke yang menyajikan parameter-parameter yang dapat ditanyakan ini untuk penghapusan massal secara mudah. Dia memberi saya salinan untuk digunakan, tetapi saya tidak berpikir dia menerbitkannya.

Harry Wood
sumber
1

Saya sangat menyarankan untuk tidak mengacaukan SQL MediaWiki! MediaWiki adalah binatang yang kompleks, sangat dioptimalkan untuk Wikipedia. Ada beberapa hal aneh yang terjadi di SQL dan jika Anda cukup HAPUS baris hal mungkin kehilangan konsistensi.

Jika Anda memiliki beberapa keterampilan pemrograman, buka API. Pywikibot adalah pilihan yang bagus.

Jika tidak, periksa alat di maintenance/direktori. Anda dapat mencoba alat saya sendiri, mewsh untuk membantu dengan itu (dan saya baru saja menambahkan "alat anti-spam" sebagai todo di sana).

keuangan fifi
sumber
0

Saya mengambil alih instalasi dan menemukan lebih dari 47.000 entri spam di usertabel dan hampir 900.000 spam externallinks. Saya menggunakan Sequel Pro dan mengunjungi setiap tabel dan menghapus entri yang tidak dibuat oleh pengguna asli. Saya menemukan spam externallinks, page, searchindex, user, watchlist. Itu cukup efisien waktu; sebagian besar waktu saya menunggu untuk menghapus kueri untuk dijalankan. Saya beruntung karena sebagian besar pengeditan otentik terjadi pada awal urutan.

ow3n
sumber
2
Tidak ada gunanya mencoba menghapus tautan spam externallinks, karena itu adalah tabel metadata redundan yang pada dasarnya hanya digunakan untuk hal-hal seperti Khusus: LinkSearch; setelah Anda membersihkan halaman yang sebenarnya, Anda bisa lari rebuildall.phpuntuk menghapus dan membangunnya kembali. Ditto untuk searchindex.
Ilmari Karonen