当前位置:网站首页 >  百科

普通开发者可直接上手:五步落地合规用户信息保护实操指南

时间:2026年06月11日 23:57:05 来源:易频IT社区

本文针对中小开发者、独立开发者,无需复杂架构、额外成本,看完即可按步骤落地符合监管要求的用户信息保护,所有步骤零门槛,可直接操作。

第一步:梳理全链路收集的用户信息,砍掉非必要收集

实操步骤:

  • 打开你的产品(网站/小程序/APP),逐个功能走一遍,把每一项你向用户申请获取的信息全部列出来,包括:手机号、头像、昵称、位置、通讯录、相机权限、存储权限等
  • 把所有信息分成两类:实现核心功能必须的信息非必要信息,比如工具类产品不需要用户通讯录,打卡工具不需要获取用户通讯录,这类直接归为非必要
  • 直接删除所有非必要信息的授权申请和收集逻辑,不要留着不用的授权请求,这是合规检查的高频问题

第二步:对所有敏感用户信息做加密存储

绝对禁止明文存储用户敏感信息(手机号、身份证号、住址等),中小开发者可按以下步骤快速实现加密:

1. 安装加密依赖(以NodeJS环境为例,其他语言可对应替换加密逻辑)

执行以下安装命令:

``` npm install bcryptjs dotenv ```

2. 添加加密工具代码,可直接复制使用

``` // 敏感信息加密工具,所有需要比对不还原的信息用这个 const bcrypt = require('bcryptjs'); const saltRounds = 10; // 兼顾安全和性能的加密强度 // 加密明文,结果存入数据库 exports.encryptInfo = (plainText) => { return bcrypt.hashSync(plainText, saltRounds); } // 验证明文,不还原密文,适合登录等场景 exports.compareInfo = (plainText, hash) => { return bcrypt.compareSync(plainText, hash); } ```

对于不需要比对、只需要存储的信息(比如收货地址),用AES对称加密,密钥存储在环境变量中,不要写死在代码里,避免代码泄露导致信息泄露:

``` require('dotenv').config(); const crypto = require('crypto'); const AES_KEY = Buffer.from(process.env.AES_KEY, 'hex'); // 从环境变量读取密钥 const iv = Buffer.from(process.env.AES_IV, 'hex'); exports.aesEncrypt = (plainText) => { const cipher = crypto.createCipheriv('aes-256-cbc', AES_KEY, iv); let encrypted = cipher.update(plainText, 'utf8', 'hex'); encrypted += cipher.final('hex'); return encrypted; } exports.aesDecrypt = (encryptedText) => { const decipher = crypto.createDecipheriv('aes-256-cbc', AES_KEY, iv); let decrypted = decipher.update(encryptedText, 'hex', 'utf8'); decrypted += decipher.final('utf8'); return decrypted; } ```

你可以在项目根目录创建.env文件,写入你的密钥,并且把.env加入.gitignore,避免提交到代码仓库,操作就是在.gitignore中新增一行.env即可。

第三步:给用户信息接口添加鉴权,防止越权访问

普通开发者可直接上手:五步落地合规用户信息保护实操指南

所有返回用户信息的接口,必须校验用户身份,避免出现A用户可以查看B用户信息的越权漏洞,实操如下:

安装JWT依赖:

``` npm install jsonwebtoken ```

添加鉴权中间件(Express框架可直接使用):

``` const jwt = require('jsonwebtoken'); const JWT_SECRET = process.env.JWT_SECRET; // 用户信息接口鉴权中间件 exports.userAuth = (req, res, next) => { // 从请求头获取token const authHeader = req.headers.authorization; if (!authHeader || !authHeader.startsWith('Bearer ')) { return res.status(401).json({code: 401, msg: '无访问权限'}); } const token = authHeader.split(' ')[1]; try { // 验证token有效性 const decoded = jwt.verify(token, JWT_SECRET); // 把userId存入请求对象,后续接口直接使用 req.userId = decoded.userId; next(); } catch (err) { return res.status(401).json({code: 401, msg: '访问令牌无效'}); } } ```

给所有返回用户信息的接口加上这个中间件,同时接口只返回业务需要的最小信息,比如只需要昵称就不要返回手机号,避免信息泄露。

第四步:实现用户信息导出与删除功能

根据合规要求,必须支持用户导出和删除自己的个人信息,实操代码如下:

导出功能(Express示例)

``` // 导出接口,需要先加鉴权中间件 router.get('/user/export', userAuth, async (req, res) => { // 查询当前用户的所有业务数据 const userAllData = await getAllUserDataByUserId(req.userId); const dataStr = JSON.stringify(userAllData, null, 2); // 返回可下载的json文件 res.setHeader('Content-Type', 'application/json'); res.attachment(`my-personal-data.json`); res.send(dataStr); }); ```

删除功能

删除时需要做到:

  • 物理删除数据库中该用户的所有数据,不要只做逻辑删除
  • 删除云存储中该用户上传的所有文件(头像、文档等)
  • 如果你的数据库开启了自动备份,在云服务商后台设置备份保留周期不超过30天,过期自动删除,不要永久保留备份

第五步:完成隐私政策公示

把整理好的收集信息清单、用途、存储期限、用户权利(导出、删除)、联系方式整理成隐私政策,放在你的产品关于页面/官网底部,然后把隐私政策链接填写到小程序/应用商店的审核信息中,核心内容不要缺,不需要复杂的话术,把上述内容说清楚就符合要求。

常见避坑提示

  • 不要开放数据库公网访问:必须给数据库设置IP白名单,只允许你的应用服务器IP访问,避免被拖库泄露信息
  • 不要申请多余的系统权限:比如做笔记APP不需要申请通讯录权限,多余的授权申请会被平台判定违规
  • 不要未经用户同意共享用户信息:任何把用户信息传给第三方的行为,都需要用户明确主动同意,并且在隐私政策中公示

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图