Mediawiki's Openness Is Not a Good Thing Anymore
Submitted by ross on Sun, 07/20/2008 - 10:52
Spammers found my MediaWiki based website, and flooded the site with over 1.2GB of link spam. To fix this, I locked down my site, so only sysops can change it, by adding the following to the end of my LocalSettings.php file:
// Implicit group for all visitors $wgGroupPermissions['*' ]['createaccount'] = true; $wgGroupPermissions['*' ]['read'] = true; $wgGroupPermissions['*' ]['edit'] = false; $wgGroupPermissions['*' ]['createpage'] = false; $wgGroupPermissions['*' ]['createtalk'] = false; // Implicit group for all logged-in accounts $wgGroupPermissions['user' ]['move'] = false; $wgGroupPermissions['user' ]['read'] = true; $wgGroupPermissions['user' ]['edit'] = false; $wgGroupPermissions['user' ]['createpage'] = false; $wgGroupPermissions['user' ]['createtalk'] = false; $wgGroupPermissions['user' ]['upload'] = false; $wgGroupPermissions['user' ]['reupload'] = false; $wgGroupPermissions['user' ]['reupload-shared'] = false; $wgGroupPermissions['user' ]['minoredit'] = false; // Implicit group for accounts that pass $wgAutoConfirmAge $wgGroupPermissions['autoconfirmed']['autoconfirmed'] = true; // Implicit group for accounts with confirmed email addresses // This has little use when email address confirmation is off $wgGroupPermissions['emailconfirmed']['emailconfirmed'] = true; // Users with bot privilege can have their edits hidden // from various log pages by default $wgGroupPermissions['bot' ]['bot'] = true; $wgGroupPermissions['bot' ]['autoconfirmed'] = true; $wgGroupPermissions['bot' ]['nominornewtalk'] = true; // Most extra permission abilities go to this group $wgGroupPermissions['sysop' ]['move'] = true; $wgGroupPermissions['sysop' ]['edit'] = true; $wgGroupPermissions['sysop' ]['createpage'] = true; $wgGroupPermissions['sysop' ]['createtalk'] = true; $wgGroupPermissions['sysop' ]['upload'] = true; $wgGroupPermissions['sysop' ]['reupload'] = true; $wgGroupPermissions['sysop' ]['reupload-shared'] = true; $wgGroupPermissions['sysop' ]['minoredit'] = true; $wgGroupPermissions['sysop']['block'] = true; $wgGroupPermissions['sysop']['createaccount'] = true; $wgGroupPermissions['sysop']['delete'] = true; $wgGroupPermissions['sysop']['deletedhistory'] = true; // can view deleted history entries, but not see or restore the text $wgGroupPermissions['sysop']['editinterface'] = true; $wgGroupPermissions['sysop']['import'] = true; $wgGroupPermissions['sysop']['importupload'] = true; $wgGroupPermissions['sysop']['move'] = true; $wgGroupPermissions['sysop']['patrol'] = true; $wgGroupPermissions['sysop']['autopatrol'] = true; $wgGroupPermissions['sysop']['protect'] = true; $wgGroupPermissions['sysop']['proxyunbannable'] = true; $wgGroupPermissions['sysop']['purge'] = true; $wgGroupPermissions['sysop']['rollback'] = true; $wgGroupPermissions['sysop']['trackback'] = true; $wgGroupPermissions['sysop']['upload'] = true; $wgGroupPermissions['sysop']['reupload'] = true; $wgGroupPermissions['sysop']['reupload-shared'] = true; $wgGroupPermissions['sysop']['unwatchedpages'] = true; $wgGroupPermissions['sysop']['autoconfirmed'] = true; $wgGroupPermissions['sysop']['upload_by_url'] = true; $wgGroupPermissions['sysop']['ipblock-exempt'] = true; $wgGroupPermissions['sysop']['DeleteOldRevisions'] = true; // Permission to change users' group assignments $wgGroupPermissions['bureaucrat']['userrights'] = true;
Next, I backed up my MySQL database with
mysqldump --opt db_name >db.sql
And deleted all the spam, by running the following mediawiki_purge.sqlscript:
DELETE FROM user WHERE user_id NOT IN (1,2,3,4,6,81); OPTIMIZE TABLE user; TRUNCATE TABLE archive; OPTIMIZE TABLE archive; DELETE FROM recentchanges WHERE rc_user NOT IN (SELECT user_id FROM user); OPTIMIZE TABLE recentchanges; DELETE FROM revision WHERE rev_user NOT IN (SELECT user_id FROM user); OPTIMIZE TABLE revision; DELETE FROM text WHERE old_id NOT IN (SELECT DISTINCT rev_text_id FROM revision); OPTIMIZE TABLE text; DELETE FROM interwiki; OPTIMIZE TABLE interwiki;
via
mysql db_name < mediawiki_purge.sql
As a result, the size of my MySQL dump file has dropped from 1.2GB, to only 8MB.
»
- ross's blog
- Login or register to post comments
