想到要修改注册用户权限是因为前两天 ppiOS问答 被一位恶意用户发布了一篇恶意的黑帽SEO文章。虽然我已经在 ppiOS问答 后台设置了用户提交的问题默认处于草稿状态,但是这个恶意发文章的用户显然是了解 Wordpress 机制的。尽管没有提供后台接口,但是他还是成功的跳过管理员的审核发布了一篇软文。我发现后第一时间就想到:糟糕,用户权限没有分配好!
之前不了解 Wordpress 的用户注册机制,为了方便用户提问我把新用户注册后的角色统一的设置成了作者,没想到这次却被人利用了这个漏洞。痛定思痛,我研究了一下 Wordpress 中关于用户权限的内容,在 wp-usermeta 中,结构比较特殊,但是结合另一篇文章的指点,还是参悟出了批量修改用户权限的方法。
执行如下的 SQL 语句可以显示你的 Wordpress 中所有用户的权限设置:
小插曲:服务器竟然检测到我贴的 SQL 语句,在预览文章时提示 405 NOT ALLOWED,估计是避免 SQL 注入吧! ASERVER 真有意思!
在 ppiOS 问答中查询结果如图:
可见,管理员的身份标示为
a:1:{s:13:"administrator";s:1:"1";}
而作者的身份标示则是
a:1:{s:6:"author";s:1:"1";}
我们的最终目的是把作者角色的用户全部转换为贡献者(contributor,只能提交文章,不能改变文章状态,即不能发表),那么 contributor 的字段是什么呢?
a:1:{s:11:"contributor";s:1:"1";}
因此我们要做的是把所有用户除了管理员的权限全部改为贡献者,SQL 语句如下:
修改完悲催的发现,原来 Wordpress 还是有方便的图形化界面来批量修改权限的。在后点,【用户】选项卡,右上方的下拉菜单,【显示选项】,选择一次显示的用户数从20改到200就差不多了……然后再批量修改就好……