核心原则:区分两套数据的安全边界 —— 本地存储的个人搜索历史、后端匿名搜索日志;最小化采集、最小化存储、访问可控,防止泄露、篡改、越权访问。
两个对象:
- 前端 localStorage 保存的本地个人搜索历史(未登录访客,不上传服务器)
- 后端数据库存储的搜索日志 / 登录用户账号搜索记录(需要重点防护)
一、前端本地存储(localStorage)安全
这部分数据只留在用户浏览器,不传到后端,风险点:本机其他脚本读取、XSS 窃取。
- 防 XSS 窃取搜索词
- 全站开启 CSP 内容安全策略,限制非法脚本执行;
- 搜索关键词写入 localStorage 前,做 HTML 转义;
- 避免把搜索历史暴露在全局 JS 变量;
- 第三方插件 / 广告代码隔离,禁止第三方 JS 读取你的 localStorage。
- 存储限制
- 只存关键词 + 时间戳,不存放任何身份信息;
- 设置条数上限(最多 5~8 条)+ 自动过期(30 天);
- 提供「清除搜索历史」按钮,一键清空本条记录;
- 边界提醒:无痕模式下 localStorage 隔离,关闭浏览器自动销毁,无需额外处理。
风险:如果网站存在 XSS 漏洞,攻击者可读取 localStorage,所以不要把敏感搜索词放这里。如果你的用户可能搜索隐私信息,建议只保留后端匿名日志,不开启本地个性化历史。
二、后端存储的搜索记录安全(重点)
分两类:匿名全站搜索日志、登录用户账号绑定搜索历史,二者分开数据表存储,不要放一张表。
1. 最小采集(从源头降低风险)
- 匿名日志:只存
search_word、时间戳、has_result、session_id、设备类型;默认不记录 IP,如确需 IP,单独字段单独加密,禁止直接和搜索词绑定对外输出;
- 登录用户历史:仅在用户勾选同意后才保存;禁止默认勾选;
- 禁止采集身份证、手机号、地址等敏感信息和搜索词关联;
- 过滤脏数据:乱码、超长、恶意 payload 关键词直接丢弃,不入库。
2. 数据存储加密
- 敏感字段加密
- 登录用户搜索记录:用户 ID、搜索词可采用字段加密(AES),数据库中不直接明文存放;数据库即使拖库,无法直接读取搜索内容;
- session_id 不要明文关联身份;会话到期后 session 失效;
- 数据库权限隔离
- 搜索日志独立数据库 / 独立数据表;
- 数据库账号最小权限:业务服务账号只能读写这张表,不能访问用户核心会员表;
- 禁止开发人员直接开放数据库查询权限;生产库禁止公网直接访问。
- 数据生命周期:自动清理
- 匿名搜索日志:设置保留周期,例如6 个月,到期自动删除归档;
- 登录用户个人搜索历史:用户可手动删除;超过 90 天无访问自动清理;
- 归档日志单独存放,访问权限单独管控。
3. 传输安全(前后端通信)
- 全站强制 HTTPS,搜索请求接口必须 HTTPS,防止传输过程抓包;
- 搜索接口增加防重放、限流:
- 同一个 IP/session 短时间大量提交搜索请求,拦截,防止爬虫批量抓取搜索记录;
- 接口增加 token 校验,拒绝非法请求;
- 接口返回:前端请求个人搜索历史时,只返回当前登录用户自己的数据;严禁接口传参漏洞,越权读取别人搜索历史。
三、访问权限控制(防止内部泄露)
很多泄露不是黑客攻击,是内部人员导出日志。
- 后台查看搜索日志权限分级:
- 普通运营:只能看聚合统计(热门词、无结果占比),看不到单条用户会话 / 账号对应的搜索词明细;
- 管理员:才可查看明细,所有查看操作留下审计日志(谁、什么时间、查询了哪些数据);
- 禁止批量导出原始搜索日志;如需导出做数据分析,导出前自动脱敏(移除 sessionid、用户标识);
- 数据分析尽量在库内聚合计算,不把原始明细拉到本地。
四、接口与业务逻辑安全
- 越权防护:
- 获取个人搜索历史接口,必须校验登录态;只能返回当前账号记录;
- 禁止通过修改参数(userid)读取其他用户的搜索历史;
- 输出过滤:
- 返回搜索历史到前端时,关键词做转义,防止存储型 XSS;
- 日志页面展示时,对特殊字符转义;
- 黑名单拦截:
恶意注入语句(SQL 注入、script 脚本)在写入数据库前清洗过滤,防止恶意词污染日志或触发注入漏洞。
五、用户侧可控(隐私合规同时也是安全保障)
- 隐私政策清晰写明:
- 哪些搜索数据会收集;本地存储 / 后端存储分别是什么用途;
- 数据保存多久;用户可以查看、删除搜索历史;
- 用户操作入口:
- 未登录访客:搜索下拉面板放置【清除搜索历史】按钮(清空 localStorage);
- 登录用户:个人中心可查看全部搜索记录、一键删除;
- 撤回授权:用户取消个性化推荐授权,后端不再新增账号绑定的搜索历史;原有历史可选择删除。
六、安全审计与应急
- 日志审计:数据库访问、后台日志查询、导出操作都留审计日志,至少保留 6 个月;
- 定期漏洞扫描:重点检测 XSS、SQL 注入、越权漏洞(搜索框是高危入口);
- 泄露应急预案:一旦发现越权访问 / 数据泄露,可快速批量删除历史记录、关停搜索日志接口。
七、风险分级和取舍建议
- 中小企业官网(推荐方案,风险最低)
✅ 本地 localStorage 存个人搜索历史,不上传服务器;后端只保存匿名聚合日志,不绑定身份、不存 IP;日志定期自动清理。
优点:攻击面小、合规简单,即使数据库被拖库,也无法关联到个人。
- 会员型产品站
✅ 用户主动授权才保存账号绑定的搜索历史,字段加密、权限严格管控,用户随时删除。
- 高敏感业务:
❌ 不建议保存账号绑定搜索历史;仅保留匿名统计,关闭个性化历史推荐。
八、安全检查自查清单(上线前自测)
- 网站全站 HTTPS
- 搜索接口不能越权读取其他用户记录
- localStorage 搜索历史有过期、条数限制、一键清除
- 后端日志和会员用户表隔离,最小权限
- 日志设置自动过期删除
- 后台查看明细操作有审计记录
- 输入做过滤,防 SQL 注入、XSS
- 隐私政策说明搜索历史收集规则
|