管理MediaWiki API使用权限

MediaWiki提供API接口用于外部程序访问和修改网站的数据库。一般来说,最常用的外部工具就是 pywikipediabot 机器人,用于半自动地处理大量繁琐编辑工作,或者自动地执行脚本,达到维护网站的目的。

然而,默认状态下,API 是对所有用户组群开放的(参见:http://www.mediawiki.org/wiki/Manual:User_rights#Default_rights),因为 $wgEnableWriteAPI 这个变量是隐式的 true,从而使得所有用户具有 writeapi 的默认权限。这将会对网站的安全带来隐患,尤其对于通过 API 对网站内容进行恶意破坏的机器人是毫无防御。通过简单的设置可以避免这类破坏,当然也仅仅是这类破坏,不能防止通过页面元素提交的破坏。

LocalSettings.php 中添加如下代码

$wgGroupPermissions['*']['writeapi'] = false; // forbid all anonymous writing api
$wgGroupPermissions['user']['writeapi'] = false; // forbid all users (including autoconfirmed) writing api
$wgGroupPermissions['bot']['writeapi'] = true; // allow those with bot flag to write api

当然,anti-spam 需要的不仅仅是这一项。如果网站频遭人类或 bot 的 spam 或 vandalism,各类强大的插件比如:AbuseFilter、ConfirmEdit是可以使用的工具。不过前者主要用于 Wikipedia 这类大型 wiki;对于小型网站的话,后者的 Captcha 模块在需要的时候就会具有比较中肯的用处。

U盘量产导致USB接口错误的解决方法

上周用一个4G的爱国者U盘做了一个系统启动盘。系统装完后,第二天刚好要去复印室打印一个重要的东西去去找老师,发现我竟然没有多余的优盘。

没时间找了,再加上这个启动盘暂时没用了,于是打算格式化一下。但是突然发现无法格式化。想了很多方法,最终从网上下了一款U盘量产工具AlcorMP,把U盘修复了一下,大概20分钟,修复完毕后,U盘可以正常格式化了。第二天一早去打印了。

中午回来后,发现鼠标和外接的键盘都无反应了。打开Windows 7下的设备管理器,发现USB控制器下的一个Intel(R) 5 Series/3400 Series Chipset Family USB Enhanced Host Controller – 3B34出现了问题:该设备未能启动。手动禁用后再重启,鼠标和键盘都恢复了。可是重启后该问题依然继续。总不能让我以后每次一开机都要先进行“禁用-启用”操作后才能正常使用电脑吧?为了解决它,使用了很多方法,比如更新驱动,都没有用。

最后,在这个帖子 http://www.fanren8.com/read-htm-tid-31956.html 里找到了解决办法。其实只要删除注册表几个键值就可以,记录下解决方法: 开始——运行——regedit— —来到键值[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass处找到USB接口控制键值Universal Serial Bus controllers,保留默认键值以及Class,IconPath,NoInstallClass。重启后,一切正常!

问题是量产软件修改了注册表导致的

Windows下安装Pywikipediabot

很早就想在MediaWiki上使用bot,但一直没有去关注。MediaWiki上的bot实现有很多途径,.NET,perl,java都有,但是貌似python最容易。于是选择了PyWikipediaBot。网上关于Pywikipedia中文的资料比较少,所以就自己按照meta-wiki上的Pywikipedia的instruction中的步骤进行安装,比较简单。

meta-wiki安装指南:http://meta.wikimedia.org/wiki/Pywikipediabot/Installation (这个有中文版翻译)

安装环境:

Windows 7 Ultimate + Python 2.7 (pywikipedia不支持Python 3.X)

MediaWiki 1.16.2 ,单语言(简体中文)

1.下载Pywikipedia。

手动下载或者TortoiseSVN都可以,后者的好处是升级方便。

手动下载PyWikipediaBot Nightlies:http://toolserver.org/~pywikipedia/nightly/

随便选一个:http://toolserver.org/~pywikipedia/nightly/package/pywikipedia/pywikipedia-nightly.7z

TortoiseSVN:http://svn.wikimedia.org/svnroot/pywikipedia/trunk/pywikipedia/

  1. 设置快捷键。

Linux下直接export一个变量就行了:

PYTHONPATH=$PYTHONPATH:~/pywikipedia/
export PYTHONPATH

Windows下简单的方法就是:为pywikipedia目录创建快捷方式,然后编辑属性,目标写cmd.exe,起始位置写该目录的路径,确定后单击该快捷方式可以直接进入cmd并且在该目录下

  1. 配置。

参考 http://meta.wikimedia.org/wiki/Pywikipediabot/Use_on_non-Wikimedia_wikis

按照安装指南,应该先创建family.py,再创建user-config.py。

3.1. 创建yourwiki_family.py,直接在/families中现成的py文件中选择一个,复制并修改即可,我改的就是最简单的“mozilla_family.py”,文件命名为“你wiki的名字_family.py”:

# -*- coding: utf-8  -*-

import family

class Family(family.Family):

     def __init__(self):
         family.Family.__init__(self)
         self.name = 'yourwiki' # 设置family名称,就是“你wiki的名字”(文件名下划线前面的部分)
         self.langs = {
             'en': 'localhost', # 语言和主机名。语言设成en即可(之前一直登录失败就是在这写成了zh-cn,后来改成en后可用了)
         }

         self.namespaces[4] = {
             '_default': u'YourWiki', #  计划页面的命名空间,一般就是LocalSettings.php中的$Sitename的值
         }

         self.namespaces[5] = {
             '_default': u'YourWiki talk', # 计划页面讨论页的命名空间
         }

     def version(self, code):
         return "1.16.1"  # MediaWiki版本号,这个貌似不重要

     def scriptpath(self, code):
         return '/wiki' # index.php, api.php的脚步相对路径,这个和你wiki所在具体路有关,比如你的MediaWiki在/wiki目录下,那么这里就写“/wiki”

Read more...