Mediawiki'de spam düzeltmelerinin toplu olarak silinmesi


15

Temelde benim 'özel' mediawiki örneğim küçük bir kumbara kadar güvenliydi. Şimdi sıkılaştırdım, ancak rastgele oluşturulmuş yüzlerce kullanıcının oluşturduğu yaklaşık yüz yeni sayfa ve düzeltme ile kaldım.

2 bölüm soru; Artık tüm sayfaları silmenin bir yolu var mı? Belirli bir kullanıcı (ben) tarafından YAPILMAYAN tüm düzeltmeleri geri almayı söyleyebilir miyim?



Artık mediawiki web sitemle ilgili bir sorunum yok. Hala bu sorunu yaşıyorsanız yorumuma yanıt verirseniz ve size canlı bir akışta bu sorunları nasıl çözdüğümü gösterebilirim.
jehovahsays

Yanıtlar:


19

Danlefree tarafından önerilen dışarı aktarma ve yeniden yükleme yöntemini kullanmak istemiyorsanız , Nuke uzantısını da yararlı bulabilirsiniz . Kurulduktan sonra, özel: Yönetici olarak Nuke özel sayfasını ziyaret etmek size şöyle bir form verir:

MediaWiki Nuke uzantı arayüzünün ekran görüntüsü

Yararlı olabilecek birkaç yerleşik MediaWiki bakım komut dosyası da vardır:

  • belirli bir ana makine adına bağlantı içeren tüm düzeltmeleri geri almak ve / veya silmek için kullanılabilecek cleanupSpam.php ,

  • Bir dosyada listelenen tüm sayfaları silmek için kullanılabilen deleteBatch.php ve

  • belirli bir kullanıcının tüm düzenlemelerini geri almak için kullanılabilen rollbackEdits.php (şu anda uygun wiki belgelerine sahip görünmüyor).


Doğrudan veritabanı erişimi kullanarak spam temizleme

Doğrudan veritabanını manipüle ederek istediğinizi yapmak da mümkündür. Durumunuza bağlı olarak ayrıntılar biraz değişebilir, ancak temel adımlar şöyle bir şey olur:

  1. Wiki'nizi salt okunur moda ayarlayın . Sen do not birisi veritabanı ile çalışma yaparken ediyoruz Messing wiki düzenleme denemek istiyorum.

  2. Wiki'nizin bir yedeğini alın. (Geri dönüşü olmayan toplu silme işlemlerinden önce bu önerilir.)

  3. Spam gönderenler tarafından oluşturulan tüm kullanıcı hesaplarını silin. Yukarıdaki soruda olduğu gibi, tek geçerli kullanıcı sizseniz, şunları yapabilirsiniz:

    DELETE FROM user WHERE user_id != YOUR_USER_ID;

    Alternatif olarak, spam gönderenler wiki'yi keşfettikten sonra yeni bir geçerli hesap oluşturulmamışsa, en yüksek geçerli kullanıcı kimlik numarasını bulabilir ve şunları yapabilirsiniz:

    DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;

    Ya da geçerli hesapları seçmek ve geri kalanını silmek için phpMyAdmin gibi bir yönetici aracı kullanabilirsiniz.

  4. Silinen hesaplarla ilişkili fazladan verileri temizleyin. Bu kesinlikle gerekli değildir, ancak bu yetim olmayan kayıtların bir faydası yoktur ve bunları silmediğinizde veritabanınızı dağıtacaktır:

    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. Geçerli bir kullanıcı tarafından yapılmayan düzeltmeleri silin:

    Bu büyük adım; hazırlıktan önceki her şey, temizlendikten sonraki her şey. Tüm spam hesapları silindiğinde şunları yapabilirsiniz:

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

    Wiki'niz anonim düzenlemeyi devre dışı bıraktıysa (özel / test wiki'leri için şiddetle tavsiye ederim), yukarıdaki sorgu tüm spam düzeltmelerinden kurtulmak için yeterli olmalıdır. Bununla birlikte, anon düzenlemesini etkinleştirdiyseniz, anonim spam'ı ayrı olarak tıklatmanız gerekir .

    Wiki'nizdeki tüm anon düzenlemelerinin spam olduğundan eminseniz, UID 0 tarafından korunması gereken tek düzenlemeler MediaWiki'nin kendisi tarafından yapılanlardır (wiki dışından içe aktarılan sayfalar gibi). Bu durumda, aşağıdaki sorgu gibi bir şey çalışmalıdır:

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

    Bu, kullanıcı adının bir IPv4 adresi gibi göründüğü (belirsiz) UID 0 tarafından yapılan tüm düzeltmeleri silecektir; yani 1 ile 9 arasında bir rakamla başlar.

    Wiki'nizde bazı gerçek yasal anon düzenlemeleri varsa, biraz daha yaratıcı olmanız gerekebilir. Yasal kayıt dışı editörler tarafından kullanılan IP adreslerinin sayısı sınırlıysa, AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')bu IP'lerin katkılarını silme işleminden hariç tutmak için yukarıdaki sorguya benzer bir cümle ekleyebilirsiniz . AND rev_user_text NOT LIKE '192.168.%'Belirli bir önekle başlayan IP adreslerindeki tüm düzenlemeleri kaydetmek için , örneğin, koşullar da ekleyebilirsiniz .

  6. Yukarıdaki sorgular spam düzeltmelerinden kurtulacak (içeriği hala texttabloda kalacak olsa da ), page_latestetkilenen sayfaların alanını var olmayan bir düzeltmeye işaret edecek şekilde bırakacaktır . Bu karışıklığa neden olabilir, bu yüzden düzeltsek iyi olur.

    İlk olarak, page_latesttüm sayfalar için sütunu silmemiz gerekir :

    UPDATE page SET page_latest = 0;
  7. Daha sonra, attachLatest.php bakım komut dosyasını çalıştırarak (önerilen; --fixkomut dosyasının veritabanını gerçekten değiştirmesi için parametreyi kullanmayı unutmayın ) veya manuel bir SQL sorgusuyla sütunu yeniden oluşturacağız :

    UPDATE page SET page_latest =
        (SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
  8. Son olarak, geçerli bir düzeltme bulunamayan tüm sayfaları sileceğiz (spam gönderenler tarafından oluşturuldukları ve hiçbir zaman geçerli içeriğe sahip olmadıkları için):

    DELETE FROM page WHERE page_latest = 0;
  9. Son dokunuş için, rebuildall.php bakım komut dosyasını çalıştırarak bağlantıları, metin dizinini ve son değişiklik tablolarını yeniden oluşturun . PurgeOldText.php bakım komut dosyasını çalıştırarak silinen spam düzeltmelerinin içeriğini veritabanından kaldırmak isteyebilirsiniz, böylece burada gereksiz yer kaplamazlar .

Her şey bittiğinde, her şeyin iyi göründüğünü kontrol edin ve öyleyse, salt okunur modu kapatın - umarım sorunun tekrarlanmasını önlemek için bazı anti-spam özellikleri yükledikten sonra .

Küçük wikiler için, basit bir özel metin tabanlı CAPTCHA yapılandırmanıza izin veren QuestyCaptcha uzantısını şiddetle tavsiye ederim . İşin püf noktası, her wiki'nin kendi soru setiyle, bir spambotu doğru cevaplamak için programlamak çok az kazanç için çok iş olacaktır. XRumer tarafından birkaç kez vurulduktan sonra kendi wiki'ime yükledim ve o zamandan beri spam görmedim.

Ps. Bu talimatları, küçük bir wiki'den eşit sayıda kullanıcı tarafından oluşturulan yaklaşık 35.000 spam düzeltmesini nükleer hale getirmek için kullandım . Her şey iyi gitti. Bu özel durumda, wiki (neyse ki!) Anonim düzenlemeye izin vermedi ve neredeyse tüm yasal kullanıcılar spam gönderenler wiki'yi bulmadan önce oluşturuldu, bu yüzden önce tüm spam hesaplarını ve ardından tüm düzeltmeleri kolayca silebilirdim yaratmışlardı. (İlk başta yanlışlıkla bir meşru hesabı sildim, bu yüzden yedeklemeden geri yüklemek ve işlemi daha dikkatli bir şekilde yeniden yapmak zorunda kaldım.) Gerçekte yaptığım şeyi daha iyi yansıtmak ve biraz daha genel olmak için yukarıdaki talimatları güncelledim. .


Bu soru birkaç yaşında, 100.000 spam botu birikmiş küçük bir wiki üzerinde hala iyi çalışıyor gibi görünüyor. O zamandan beri bir şeyler değişti mi; ek adımlar var mı?
Ant6n

Burada bazı haberler var mı? Bunlar günümüzde "en iyi uygulamalar" ve "en iyi araçlar" mı?
Peter Krauss

rebuildall.phpbakımda değil: O Aksi takdirde teşekkür ederim
Jamie Hutber

5

Bu durumu ele almanın en kolay yolu (bir nuke'n'pave sakıncası yoksa), kullanıcı adınız tarafından oluşturulan veya düzenlenen tüm wiki sayfalarını dışa aktarmak, wiki'yi yeniden yüklemek ve oluşturduğunuz dışa aktarma dosyasını almak olacaktır.

Bu bağlamda "yeniden yükle" şu anlama gelir:

  1. Sizin tarafınızdan oluşturulan makaleleri dışa aktarın (muhtemelen WikiSysop kullanıcısı veya benzeri olarak oturum açılmıştır)
  2. MW veritabanını bırakın
  3. Boş bir MW veritabanı oluşturma
  4. LocalSettings.phpDosyanızı güvenli bir yere kopyalayın
  5. /config/Dizini yeniden yükle
  6. Kurulum işlemini yeni MW veritabanında çalıştırın (eski yönetici kullanıcınızı yeniden oluşturmak isteyeceğinizi unutmayın)
  7. /config/Dizini silin ve eski LocalSettings.phpdosyanızı tekrar MW kök dizinine taşıyın
  8. 1. Adımda oluşturulan dosyayı içe aktarın

Düzenleme: Bu işlemle ilgili herhangi bir sorunla karşılaşmanız veya spam'ı temizlemenin alternatif yollarını denemek isterseniz veritabanı yedeklemesini (spam düzeltmeleri dahil) geri çekmek isteyebilirsiniz.


2

Teorik olarak, bir MediaWiki örneğine, istediğiniz şeyleri yapmak da dahil olmak üzere, istediğinizi yapmak için bir MediaWiki uzantısı yazabilirsiniz.

Kısaca ve danlefree tarafından önerilen "nuke'n'pave" den kısa bir sürede, Kullanıcı Birleştirme ve Sil uzantısını yararlı bulabilirsiniz: birden fazla spambot hesabını, düzenlemeleri daha sonra ele alınabilecek tek bir hesapta birleştirmek için kullanabilirsiniz kolayca.


2

Bu durumu ele almanın en kolay yolu DeleteBatch uzantısını yüklemektir . Silinmesini istediğiniz sayfa adlarının bir komut dosyasını almak için wiki'nizdeki Special: AllPages komutunu kullanın ve bunu Special: DeleteBatch klasörüne yükleyin.


1

Yalnızca yüz spam içerikli sayfa ise çok kötü bir şey yapmazsınız. Binlerce spam sayfası olan bir wiki'yi temizlemek zorunda kaldım. Kullanıcı: Halz'ın bu sayfada bazı iyi ipuçlarına rastladım: https://www.mediawiki.org/wiki/User:Halz/Mass_despamming çeşitli araçların sınırlamalarının dökümü dahil.

Altta, biraz yavaş çalışan ancak özellikle wiki'nin spam göndericileri tarafından ele geçirildiği süreyi tanımlayabiliyorsanız, büyük olasılıkla spam olan sayfaları bulmanıza yardımcı olan kullanışlı bir SQL sorgusu sağlanmıştır. Halz ayrıca, kolay kitle silme için bu tür sorgulanabilir parametreleri sunan Hack: Nuke'nin saldırıya uğramış bir versiyonuna sahiptir. Bana kullanmam için bir kopya verdi, ama yayınladığını sanmıyorum.


1

MediaWiki'nin SQL'iyle uğraşmamanızı şiddetle tavsiye ederim! MediaWiki, Wikipedia için çok optimize edilmiş karmaşık bir canavar. SQL'de bazı garip şeyler oluyor ve sadece satırları SİLDİĞİNİZde işler tutarlılığı kaybedebilir.

Bazı programlama becerileriniz varsa API'yı inceleyin. Pywikibot iyi bir seçimdir.

Aksi takdirde, maintenance/dizindeki araçları kontrol edin . Kendi aracımı deneyebilirsin, buna yardımcı olmak için mewsh (ve ben sadece "anti-spam araçları" ekledim).


0

Bir kurulumu devraldım ve usertabloda 47.000'den fazla spam girişi ve neredeyse 900.000 spam buldum externallinks. Sequel Pro'yu kullandım ve her bir tabloyu ziyaret ettim ve otantik kullanıcılar tarafından yapılmayan girdileri sildim. Ben spam buldum externallinks, page, searchindex, user, watchlist. Oldukça zaman tasarrufluydu; zamanımın büyük kısmı silme sorgularının çalışmasını bekliyordu. Şanslıydım çünkü otantik düzenlemelerin çoğu şeylerin sırasına göre erken gerçekleşti.


2
Spam bağlantılarını silmeye çalışmanın bir anlamı yok externallinks, çünkü bu temelde yalnızca Special: LinkSearch gibi şeyler için kullanılan gereksiz bir meta veri tablosu; gerçek sayfaları temizledikten sonra, sadece rebuildall.phpsilmek ve yeniden oluşturmak için koşabilirsiniz . Aynen searchindex.
Ilmari Karonen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.