2018.04.22:根据@huozk指出,文档在此处有错误,如果之前没有初始化过,则插件报错。现已修复。
NexT主题使用的Leancloud访客统计插件存在重大安全漏洞,拥有不良企图的人利用该漏洞可随意更改访客数量或一定程度上增删数据库记录。
该漏洞由我独立发现,并由Ivan.Nginx确认。
- 有关的issue:#25
- 有关的pr:#137
- 有关的插件:hexo-leancloud-counter-security
经过讨论后,我们认为该漏洞必须由使用者手动修复。本文给出了修复方法。
注意:所有使用该插件而未经修复的NexT站点或使用类似方法集成Leancloud访客统计功能的站点都被认为是不安全的,请尽快修复。
For International Users:
This post is a guide to fix a serious security bug in Leancloud visitor counter, which is found by me and confirmed by Ivan.Nginx.
Someone could use this bug to change your visitor number easily and even add/delete records in your database.
This bug could only be fixed manually.
- related issue: #25
- related pr: #137
- related plugin: hexo-leancloud-counter-security
Warning: All NexT sites using Leancloud visitor counter that are not fixed and other sites integrated this function by similiar ways are considered unsecurity. Please fix it as soon as possible!
English version guide is under translating and will be released in few days.
2018.3.16: English version guide is here
为方便起见,本文将复述从头开始配置Leancloud访客统计插件的过程。
本文部分内容参考自Doublemine的为NexT主题添加文章阅读量统计功能。
对于已经完成该部分配置的用户,请自行对照本文步骤进行修复。
在配置前,请升级NexT至v6.0.5以上。
2018.2.26:目前NexTv6.0.5已经更新,但相关pr仍在讨论中。预计该漏洞将在v6.0.6修复
注:在本文发布时相关pull-request还在review当中,NexTv6.0.5仍未更新,请自行合并pr或按文末不更新主题的方法修复该漏洞。
2018.3.16:NexTv6.0.6已更新,该修复插件作为beta功能暂时添加,默认security选项为false,预计于v6.0.7正式添加。
2018.4.22:目前NexTv6.2.0已正式支持。
在配置过程中请注意博客配置文件和主题配置文件的区别。
¶注册Leancloud并创建应用
- 首先,前往Leancloud官网leancloud.cn进行注册,并登陆。
- 然后点击图示
1
处,进入控制台: - 接着,点击图示
1
处,创建应用: - 在弹出窗口
1
处输入应用名称(可随意输入,可更改,为演示方便取名为test),并选择2
处“开发版”,然后点击3
处创建:
到这里应用创建完成。
¶建立Counter类并在NexT中启用插件
- 点击
1
处应用名称进入应用管理界面: - 如图,点击侧边栏
1
处创建Class: - 在弹出窗口
1
处填入Counter
,勾选2
处无限制,并点击3
处创建Class: - 此时类已创建完成。接下来点击图示
1
处进入设置,然后点击2
处进入应用Key: - 粘贴
App ID
和App Key
到NexT主题配置文件_config.yml
对应位置。此时配置文件应如下:
1 | leancloud_visitors: |
- 设置Web安全域名确保域名调用安全。点击
1
处进入安全中心,然后在2
处填写自己博客对应的域名(注意协议、域名和端口号需严格一致):
到这里内容均与Doublemine的为NexT主题添加文章阅读量统计功能这篇文章相同,只不过截图为新版的Leancloud的界面。
¶部署云引擎以保证访客数量不被随意篡改
- 点击左侧
1
处云引擎,然后点击2
处部署,再点击3
处在线编辑: - 点击
1
处创建函数: - 在弹出窗口选择
1
处Hook
类型,然后2
处选择beforeUpdate
,3
处选择刚才建立的Counter
类。在4
中粘贴下方代码后,点5
处保存。
1 | var query = new AV.Query("Counter"); |
如图所示:
- 点击保存后应出现类似红框处函数。此时点击
1
处部署: - 在弹出窗口点击
1
处部署: - 等待出现红框处的成功部署信息后,点击
1
处关闭:
至此云引擎已成功部署,任何非法的访客数量更改请求都将失败。
¶进一步设置权限(可选,建议设置)
- 打开NexT主题配置文件
_config.yml
,将leancloud_visitors下的security设置为true(如没有则新增):
1 | leancloud_visitors: |
对betterPerformance
选项的说明:
由于Leancloud免费版的云引擎存在请求线程数和运行时间限制以及休眠机制,很多时候访客数量加载会很慢。如果设置betterPerformance
为true
,则网页则会在提交请求之前直接显示访客人数为查询到的人数+1,以增加用户体验。
- 打开博客配置文件
_config.yml
,新增以下配置:
1 | leancloud_counter_security: |
- 打开cmd并切换至博客根目录,键入以下命令以安装
hexo-leancloud-counter-security
插件:
1 | npm install hexo-leancloud-counter-security --save |
在相同目录键入以下命令:
1
hexo lc-counter register <<username>> <<password>>
或
1
hexo lc-counter r <<username>> <<password>>
将
<<username>>
和<<password>>
替换为你自己的用户名和密码(不必与leancloud的账号)相同。此用户名和密码将在hexo部署时使用。打开博客配置文件
_config.yml
,将<<username>>
和<<password>>
替换为你刚刚设置的用户名和密码:
1 | leancloud_counter_security: |
- 在博客配置文件
_config.yml
的deploy
下添加项:
1 | deploy: |
- 返回Leancloud控制台的应用内。依次点击
1
2
,检查_User表中是否出现一条记录(图示以用户名为admin为例): - 点击
1
处进入Counter表,依次点击2
3
,打开权限设置: 点击此处应与下条create设置相同(选择你所创建的用户):1
add_fields后选择2
指定用户, 并将下两栏留空:- 点击
1
create后选择2
指定用户, 在3
处键入用户名,点击4
处后点击5
处添加:完成此步操作后,界面应与图示类似: - 点击
1
delete后选择2
指定用户, 并将下两栏留空:
至此权限已设置完成,数据库记录只能在本地增删。
每次运行hexo d
部署的时候,插件都会扫描本地source/_posts
下的文章并与数据库对比,然后在数据库创建没有录入数据库的文章记录。
如果在博客配置文件中留空username或password,则在部署过程中程序会要求输入。
¶手动修改lean-analytics-swig的方法(不建议)(已过时)
不愿更新NexT主题的用户可使用此方法保证插件正常使用。
强烈建议更新NexT至v6.0.5以上。
打开\layout\_third-party\analytics\lean-analytics.swig
文件,替换为以下内容:
1 | {% if theme.leancloud_visitors.enable %} |