官方的demo已经是4.0,可惜下不到源码
翻来看看ThinkSNS 3.0的源码,发现一处严重的设计缺陷
apps\public\Lib\Action\AccountAction.class.php 下doSaveProfile方法为保存用户信息操作
修改用户昵称这里$uname 是你想修改的昵称(你是A,你想修改成B)$oldName是你以前的昵称,我们跟进$res = model('Register')->isValidName($uname, $oldName);这个函数
这里主要经过三次审核:
1.是否使用预保留的名称array('name', 'uname', 'admin', 'profile', 'space');
2.判断昵称长度是否是2-10个汉字之间;
3.判断用户昵称是否被使用。
我们直接看看第三处的判断逻辑:用户昵称是否被使用
if(($name != $old_name) && $this->_user_model->where('`uname`="'.mysql_escape_string($name).'"')->find()) {
如果$name != $old_name,则进入if。但是old_name可被参数传入,我直接更改old_name和name为任意的同一个人就绕过该if逻辑了!
同时我们看看安装好ThinkSNS 3后数据库人员信息:

管理员的昵称是“管理员”,不在保留的名称array('name', 'uname', 'admin', 'profile', 'space')里,所以也可以更改为管理员。。。
现在官方demo是ThinkSNS 4版本的,注册一个账户,编辑我的个人信息
http://demo.thinksns.com/ts4/index.php?app=public&mod=Account&act=index

在朋友圈里看到一个人Clay
http://demo.thinksns.com/ts4/index.php?app=public&mod=Profile&act=index&uid=32323

貌似是个技术总监,那我们抓包更改我的个人信息试下:

发现我也是技术总监了!
