Xóa hàng loạt các sửa đổi thư rác trong Mediawiki


15

Về cơ bản, ví dụ mediawiki 'riêng tư' của tôi cũng an toàn như một con heo đất mới chập chững biết đi. Tôi đã thắt chặt nó ngay bây giờ, nhưng còn lại khoảng một trăm trang mới và các bản sửa đổi được tạo bởi hàng trăm người dùng được tạo ngẫu nhiên.

Câu hỏi 2 phần; Có cách nào để xóa tất cả các trang mồ côi không? Tôi có thể nói để quay lại tất cả các sửa đổi KHÔNG được thực hiện bởi một người dùng cụ thể (tôi) không?



Tôi không gặp vấn đề đó với trang web mediawiki của mình nữa. Nếu bạn vẫn gặp vấn đề này phản hồi bình luận của tôi và tôi có thể chỉ cho bạn trong một luồng trực tiếp về cách tôi khắc phục những vấn đề này.
Đức Giê

Câu trả lời:


19

Nếu bạn không muốn sử dụng phương thức xuất và cài đặt lại được đề xuất bởi danlefree , bạn cũng có thể thấy tiện ích mở rộng Nuke hữu ích. Sau khi cài đặt, truy cập trang đặc biệt Đặc biệt: Nuke với tư cách quản trị viên cung cấp cho bạn một biểu mẫu như thế này:

Ảnh chụp màn hình giao diện mở rộng MediaWiki Nuke

Ngoài ra còn có một số tập lệnh bảo trì MediaWiki tích hợp có thể hữu ích, bao gồm:

  • CleanupSpam.php , có thể được sử dụng để khôi phục và / hoặc xóa tất cả các phiên bản có chứa một liên kết đến một tên máy chủ cụ thể,

  • removeBatch.php , có thể được sử dụng để xóa tất cả các trang được liệt kê trong một tệp và

  • rollbackEdits.php (hiện tại dường như không có tài liệu trên wiki phù hợp), có thể được sử dụng để khôi phục tất cả các chỉnh sửa của người dùng được chỉ định.


Dọn dẹp thư rác bằng cách sử dụng truy cập cơ sở dữ liệu trực tiếp

Cũng có thể làm những gì bạn muốn bằng cách thao tác trực tiếp với cơ sở dữ liệu. Có các chi tiết có thể thay đổi một chút tùy thuộc vào tình huống của bạn, nhưng các bước cơ bản sẽ diễn ra như sau:

  1. Đặt wiki của bạn ở chế độ chỉ đọc . Bạn không muốn ai đó thử chỉnh sửa wiki trong khi bạn đang làm rối cơ sở dữ liệu.

  2. Tạo một bản sao lưu của wiki của bạn. (Điều này rất được khuyến khích trước khi xóa bất kỳ khối lượng không thể đảo ngược nào.)

  3. Xóa tất cả tài khoản người dùng được tạo bởi những kẻ gửi thư rác. Nếu, như trong câu hỏi trên, bạn là người dùng hợp lệ duy nhất, bạn chỉ có thể làm:

    DELETE FROM user WHERE user_id != YOUR_USER_ID;

    Ngoài ra, nếu không có tài khoản hợp lệ mới nào được tạo sau khi những kẻ gửi thư rác phát hiện ra wiki, bạn có thể tìm số ID người dùng hợp lệ cao nhất và thực hiện:

    DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;

    Hoặc bạn có thể sử dụng một công cụ quản trị như phpMyAdmin để chọn thủ công các tài khoản hợp lệ và xóa phần còn lại.

  4. Làm sạch dữ liệu bổ sung liên quan đến các tài khoản bị xóa. Điều này không thực sự cần thiết, nhưng những hồ sơ mồ côi đó không được sử dụng và sẽ làm lộn xộn cơ sở dữ liệu của bạn nếu bạn không xóa chúng:

    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. Xóa mọi sửa đổi không được thực hiện bởi người dùng hợp lệ:

    Đây là bước tiến lớn; tất cả mọi thứ trước khi nó được chuẩn bị, mọi thứ sau khi nó được dọn dẹp. Với tất cả các tài khoản spam đã bị xóa, bạn chỉ cần làm:

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

    Nếu wiki của bạn bị vô hiệu hóa chỉnh sửa ẩn danh (mà tôi đặc biệt khuyên dùng cho wiki riêng / kiểm tra), thì truy vấn trên đủ để loại bỏ tất cả các sửa đổi spam. Tuy nhiên, nếu bạn đã bật tính năng chỉnh sửa anon, bạn sẽ phải loại bỏ thư rác ẩn danh riêng biệt.

    Nếu bạn chắc chắn rằng tất cả các chỉnh sửa anon trên wiki của bạn là spam, thì các chỉnh sửa duy nhất được thực hiện bởi UID 0 mà chúng tôi có thể cần giữ lại là các chỉnh sửa được thực hiện bởi chính MediaWiki (chẳng hạn như các trang được nhập từ bên ngoài wiki). Trong trường hợp đó, một cái gì đó giống như truy vấn sau sẽ hoạt động:

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

    Điều này sẽ xóa mọi sửa đổi bởi UID 0 trong đó tên người dùng trông (mơ hồ) giống như một địa chỉ IPv4; nghĩa là, nó bắt đầu bằng một chữ số từ 1 đến 9.

    Nếu wiki của bạn có một số chỉnh sửa anon hợp pháp thực tế, bạn có thể phải sáng tạo hơn một chút. Nếu số lượng địa chỉ IP được sử dụng bởi các biên tập viên chưa đăng ký hợp pháp bị hạn chế, bạn chỉ cần thêm một mệnh đề như AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')vào truy vấn ở trên để loại trừ đóng góp của các IP đó khỏi bị xóa. Bạn cũng có thể thêm các điều kiện như, giả sử, AND rev_user_text NOT LIKE '192.168.%'để lưu tất cả các chỉnh sửa từ địa chỉ IP bắt đầu bằng một tiền tố cụ thể.

  6. Các truy vấn ở trên sẽ loại bỏ các sửa đổi spam (mặc dù nội dung của chúng sẽ vẫn còn trong textbảng), nhưng sẽ để lại page_latesttrường của bất kỳ trang bị ảnh hưởng nào chỉ ra một sửa đổi không tồn tại. Điều này có thể gây nhầm lẫn, vì vậy chúng tôi nên sửa nó.

    Đầu tiên, chúng ta cần xóa sạch page_latestcột cho tất cả các trang:

    UPDATE page SET page_latest = 0;
  7. Tiếp theo, chúng tôi sẽ xây dựng lại cột, bằng cách chạy tập lệnh bảo trì AttachLatest.php (được khuyến nghị; hãy nhớ sử dụng --fixtham số để tập lệnh thực sự thay đổi cơ sở dữ liệu) hoặc bằng truy vấn SQL thủ công:

    UPDATE page SET page_latest =
        (SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
  8. Cuối cùng, chúng tôi sẽ xóa tất cả các trang mà không có bản sửa đổi hợp lệ nào có thể được tìm thấy (vì chúng được tạo bởi những kẻ gửi thư rác và không bao giờ có bất kỳ nội dung hợp lệ nào):

    DELETE FROM page WHERE page_latest = 0;
  9. Đối với một liên lạc cuối cùng, xây dựng lại các liên kết, chỉ mục văn bản và bảng thay đổi gần đây bằng cách chạy rebuildall.php kịch bản bảo trì. Bạn cũng có thể muốn xóa nội dung của các bản sửa đổi thư rác đã bị xóa khỏi cơ sở dữ liệu để chúng không chiếm dung lượng không cần thiết ở đó, bằng cách chạy tập lệnh bảo trì purgeOldText.php .

Khi mọi thứ đã hoàn tất, hãy kiểm tra xem mọi thứ có ổn không, và nếu vậy, hãy tắt chế độ chỉ đọc - hy vọng sau khi cài đặt một số tính năng chống spam để tránh sự cố xảy ra.

Đối với các wiki nhỏ, tôi đặc biệt khuyên dùng tiện ích mở rộng QuestyCaptcha , cho phép bạn định cấu hình CAPTCHA dựa trên văn bản tùy chỉnh đơn giản. Bí quyết là, với mỗi wiki có một bộ câu hỏi riêng, lập trình một spambot để trả lời chúng một cách chính xác sẽ là rất nhiều công việc để kiếm được rất ít. Tôi đã cài đặt nó trên wiki của riêng mình sau khi bị XRumer tấn công một vài lần và không thấy có thư rác nào kể từ đó.

Thi thiên Tôi đã sử dụng các hướng dẫn này để nuke khoảng 35.000 bản sửa đổi spam được tạo bởi nhiều người dùng từ một wiki nhỏ . Mọi thứ đều ổn. Trong trường hợp cụ thể này, wiki (may mắn thay!) Không cho phép chỉnh sửa ẩn danh và gần như tất cả người dùng hợp pháp đã được tạo trước khi những kẻ gửi thư rác tìm thấy wiki, vì vậy trước tiên tôi có thể dễ dàng xóa tất cả các tài khoản spam và sau đó sửa đổi tất cả họ đã tạo ra. (Lúc đầu tôi đã vô tình xóa một tài khoản hợp pháp, vì vậy tôi phải khôi phục từ bản sao lưu và làm lại quá trình cẩn thận hơn.) Tôi đã cập nhật các hướng dẫn ở trên để phản ánh tốt hơn những gì tôi thực sự đã làm, và nói chung chung hơn một chút .


Câu hỏi này là một vài năm tuổi, nó dường như vẫn hoạt động tốt trên một wiki nhỏ đã tích lũy được 100.000 bot spam. Có những thứ thay đổi kể từ đó; Có thể có các bước bổ sung?
Ant6n

Một số tin tức ở đây? Đây là những "thực hành tốt nhất" và "công cụ tốt nhất" hiện nay?
Peter Krauss

rebuildall.phpkhông được bảo trì: O Nếu không, cảm ơn bạn
Jamie Hutber

5

Cách dễ nhất để xử lý tình huống này (nếu bạn không nhớ nuke'nave) sẽ xuất tất cả các trang wiki được tạo hoặc chỉnh sửa bởi tên người dùng của bạn, cài đặt lại wiki và nhập tệp xuất mà bạn đã tạo.

"Cài đặt lại" trong ngữ cảnh này có nghĩa là:

  1. Xuất các bài viết do bạn tạo (có lẽ đã đăng nhập với tư cách là người dùng WikiSysop hoặc tương tự)
  2. Bỏ cơ sở dữ liệu MW
  3. Tạo cơ sở dữ liệu MW trống
  4. Sao chép LocalSettings.phptệp của bạn vào một vị trí an toàn
  5. Tải lên lại /config/thư mục
  6. Chạy quy trình cài đặt trên cơ sở dữ liệu MW mới (lưu ý rằng bạn sẽ muốn tạo lại người dùng quản trị cũ của mình)
  7. Xóa /config/thư mục và di chuyển LocalSettings.phptệp cũ của bạn trở lại root MW
  8. Nhập tệp được tạo ở Bước # 1

Chỉnh sửa: Bạn có thể muốn kéo xuống một bản sao lưu cơ sở dữ liệu (bao gồm cả sửa đổi thư rác) trong trường hợp bạn gặp phải bất kỳ vấn đề nào với quy trình này hoặc muốn thử nghiệm các cách khác để xóa thư rác.


2

Về lý thuyết, bạn có thể viết một phần mở rộng MediaWiki để làm bất cứ điều gì bạn muốn với một cá thể MediaWiki, bao gồm cả để làm những việc bạn đã đề cập.

Nói ngắn gọn và thiếu "nuke'n'pave" được đề xuất bởi danlefree, bạn có thể thấy tiện ích mở rộng Hợp nhất và Xóa người dùng hữu ích: bạn có thể sử dụng nó để hợp nhất nhiều tài khoản spambot vào một tài khoản mà sau đó có thể chỉnh sửa dễ dàng


2

Cách dễ nhất để xử lý tình huống này là cài đặt phần mở rộng DeleteBatch . Sử dụng Đặc biệt: AllPages trên wiki của bạn để lấy tệp tập lệnh của tên trang bạn muốn xóa và tải nó vào Đặc biệt: DeleteBatch.


1

Nếu chỉ có một trăm trang spam, bạn sẽ không làm quá tệ. Tôi đã phải dọn sạch một wiki có hàng ngàn trang bị spam. Tôi đã xem qua một số mẹo hay của Người dùng: Halz trên trang này: https://www.mediawiki.org/wiki/User:Halz/Mass_despamming bao gồm cả sự cố về các giới hạn của các công cụ khác nhau.

Ở phía dưới, anh ta đã cung cấp một truy vấn SQL hữu ích chạy chậm một chút nhưng giúp bạn tìm các trang có khả năng là spam, đặc biệt nếu bạn có thể xác định khoảng thời gian khi wiki bị kẻ lừa đảo chiếm đoạt. Halz cũng có một phiên bản mở rộng bị hack: Nuke trình bày các loại tham số có thể truy vấn này để xóa hàng loạt dễ dàng. Anh ấy đưa cho tôi một bản để sử dụng, nhưng tôi không nghĩ anh ấy đã xuất bản nó.


1

Tôi thực sự khuyên bạn không nên gây rối với SQL của MediaWiki! MediaWiki là một con thú phức tạp, rất được tối ưu hóa cho Wikipedia. Có một số điều kỳ lạ đang diễn ra trong SQL và nếu bạn chỉ XÓA hàng thì mọi thứ có thể mất tính nhất quán.

Nếu bạn có một số kỹ năng lập trình, hãy xem qua API. Pywikibot là một lựa chọn tốt.

Nếu không, hãy kiểm tra các công cụ trong maintenance/thư mục. Bạn có thể thử công cụ của riêng tôi, mewsh để giúp với điều đó (và tôi chỉ thêm "công cụ chống thư rác" như một việc cần làm ở đó).


0

Tôi đã tiến hành cài đặt và tìm thấy hơn 47.000 mục spam trong userbảng và gần 900.000 thư rác externallinks. Tôi đã sử dụng Sequel Pro và truy cập từng bảng và xóa các mục không được thực hiện bởi người dùng xác thực. Tôi tìm thấy thư rác trong externallinks, page, searchindex, user, watchlist. Nó khá hiệu quả về thời gian; phần lớn thời gian của tôi đang chờ các truy vấn xóa để chạy. Tôi đã may mắn vì hầu hết các chỉnh sửa xác thực đã xảy ra sớm theo thứ tự.


2
Không có điểm nào trong việc cố gắng xóa các liên kết spam khỏi externallinks, vì đó là bảng siêu dữ liệu dư thừa về cơ bản chỉ được sử dụng cho những thứ như Đặc biệt: Liên kết Tìm kiếm; Khi bạn đã dọn sạch các trang thực tế, bạn có thể chạy rebuildall.phpđể xóa và xây dựng lại nó. Ditto cho searchindex.
Ilmari Karonen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.