Valine 1.4 如何保护评论者的邮箱和 IP

前言

AyagawaSeirin 提出了一个 Valine 隐私安全漏洞,发送请求中响应内容明文暴露评论者IP、邮箱等隐私内容,所以我就去查了一下 LeanCloud 文档,发现可以手动更改字段权限,但是,如果设置 mail 客户端不可见,将不会显示评论者的 Gravatar,转为显示默认头像,因为原版是取到明文邮箱后再转 MD5 取头像的。想到的解决办法是新增一个可见字段存储 mail 的 MD5,需要改 Valine 源码,还需要处理现有数据。

以下是我实现的魔改版本,基于 Valine.min.js 版本 1.4.14 修改。该魔改版新增一个可见字段(mailMd5)存储 mail 的 MD5,并提供了脚本处理现有评论数据。

原版未保护邮箱和 IP

设置字段权限后,即使有 AppId、AppKey、字段名,也无法通过接口查询到隐私数据

Github

star hits

用法

  1. 访问 LeanCloud 控制台 > 存储 > 结构化数据

  2. 选择 Comment Class,分别点击 mail 和 ip 相应字段的下拉菜单,选择编辑

  3. 勾选”客户端不可见”后,客户端发起查询的时候,返回的结果将不包含这个字段
    * 即使用 AppKey 指定字段名查询,也不会返回字段值,足够安全。

  4. 请同样确认 class 的权限配置

  5. 克隆本仓库

    1
    2
    3
    4
    5
    # 克隆
    git clone -b imaegoo/1.4.14 https://github.com/imaegoo/Valine.git valine
    cd valine
    # 安装依赖
    npm install
  6. 打开 migrate.js,修改里面的 appId,appKey,masterKey,serverURL 为自己的

  7. 执行脚本

    1
    node migrate.js

  8. 替换博客的 Valine.min.js 为本仓库到 valine.js,可以使用 CDN 地址:
    https://cdn.jsdelivr.net/npm/@imaegoo/valine@1.4.1-4.1/valine.min.js

  9. 测试一下,头像是否正常加载,API 是否没有返回 mail 和 ip

改动

如果你对魔改版感到不放心,可以检查检查我都改了些啥

Valine 1.4 如何保护评论者的邮箱和 IP

https://www.imaegoo.com/2020/valine-private/

作者

iMaeGoo

发布于

2020-08-08

更新于

2020-09-03

许可协议

CC BY 4.0

评论