Thinkcmfx不算巧妙的安全登录设置

2016-12-31 13:17:00
hainuo
原创 1504
摘要:thinkcmfx设置了一个后台地址加密码: 这是一个比较好的设计理念。
thinkcmfx设置了一个后台地址加密码: 这是一个比较好的设计理念。 # 缘起 一个客户的网站使用thinkcmf制作的官网站点,设置了后台地址加密码后忘记了。 # 处理过程 既然是登录页面地址跳转回了首页,那么在后台`public/login`在执行中或者执行之前,就被`header`跳转了。我们首先看login代码,好简单的设计 ``` //后台登陆界面 public function login() { $admin_id=session('ADMIN_ID'); if(!empty($admin_id)){//已经登录 redirect(U("admin/index/index")); }else{ $site_admin_url_password =C("SP_SITE_ADMIN_URL_PASSWORD"); $upw=session("__SP_UPW__"); if(!empty($site_admin_url_password) && $upw!=$site_admin_url_password){ redirect(__ROOT__."/"); }else{ session("__SP_ADMIN_LOGIN_PAGE_SHOWED_SUCCESS__",true); $this->display(":login"); } } } ``` 很简单的逻辑 就将事情处理好了,所以事情简单了,我们只需要寻找`SP_SITE_ADMIN_URL_PASSWORD`的生成方式就好,然后修改`upw` 变量值为配置中的这个值即可。跳过这一步的方式就是这么简单。 # 追因 既然是设置,通过跟踪session发现,这个`upw`传递的值是客户在地址栏里面访问的时候传递过来的值。 客户说这个码是没错的,那么不应该 跟配置中保留的值不一致。最终发现是客户没有记录好upw的值,因为upw的值是经过加盐和双重md5加密的。于是我开始研究thinkcmf设计的这个后台登录码的思想。 # thinkcmfx的后台安全码设计思想 用户在后台提交网站信息设置的时候,保留原始码信息,存在数据库中的site_options数组中,将某些配置分配到一个数组中,然后写入/data/conf/config.php 中(后台安全码就是写入了这个文件)。校验的时候在url中增加upw=xxxxx项目,然后在后台入口页面将这个upw写入到session,然后在public/login中直接比对加密后的值与传递来的值是否相等。 # 分析 思路很独到,能够防范大部分爬虫对于后台地址的爬爬取,也从较大程度上解决了安全登陆的问题。当然,我们在了解了实现过程后,发现其实并不是那么巧妙,整个过程没有超脱我们的尝试,只是thinkcmf将解决思路放在了安全登录之前。