日常工作中的数据安全

一、代码层面的安全

1. 禁止硬编码敏感信息

密码、密钥、数据库账号、Token 绝不写死在代码、配置文件、注释里,统一用配置中心、环境变量、密钥管理中心存放。

(1) 规避硬编码的正确写法

  • 普通配置:放入 yml/properties 配置文件
  • 敏感账号密码:放入配置中心(Nacos/Apollo)
  • 环境地址:使用环境变量
  • 公共常量:统一抽 Constant 常量类
  • 秘钥、数据库密码:加密存放

2. 接口参数脱敏

手机号、身份证、银行卡、邮箱日志输出脱敏,日志不打印明文隐私数据。

(1) 脱敏的实现方式

  • **工具类手动脱敏:**写通用脱敏工具方法,接收字符串截取拼接,业务调用处理。

  • **Jackson 注解脱敏:**实体字段上加注解,序列化自动脱敏,无需手动写代码。

  • **全局统一拦截:**统一返回结果切面,在返回给前端之前统一批量脱敏。

  • 日志脱敏: 自定义日志转换器,日志不打印明文,避免隐私泄露。

(2) 使用场景

  • 后端查询列表、详情接口返回前端
  • 操作日志、业务日志打印
  • 数据导出、消息推送、短信展示
  • 第三方接口对外透出用户信息

3. 接口安全校验

接口安全目的:防止非法访问、参数篡改、请求重放、恶意刷接口、数据泄露、越权操作。

(1) 常用校验方式

① Token 令牌校验(最常用)
  • 登录成功下发JWT/Token
  • 每次请求请求头携带 Token
  • 后端校验是否有效、是否过期、是否篡改
  • 无 Token / 无效直接拦截拒绝访问
② 时间戳防重放

请求携带当前时间戳,后端校验

  • 超出5 分钟直接判定过期失效
  • 防止抓包后重复恶意调用接口
③ 签名验签(对外三方接口必备)
  1. 双方约定密钥 secret
  2. 请求参数 + 时间戳 + 密钥拼接做 MD5/SHA 加密生成 sign
  3. 后端用同样规则重新加密比对签名
  4. 不一致直接拦截,防参数篡改
④ 请求来源白名单
  • 限制 IP 白名单、域名白名单
  • 只允许指定服务 / 内网调用,禁止外网非法访问
⑤ 接口限流防刷
  • 单 IP / 账号限制访问频率
  • 防止恶意高频请求压垮服务器

4. SQL 防注入

SQL注入:用户恶意输入特殊字符,拼接进 SQL 语句,篡改查询逻辑,越权查数据、删改库表。

核心原因 :直接字符串拼接 SQL,未做参数过滤

(1) 主流防护手段

① 使用预编译语句(最有效)
  • JDBC:PreparedStatement 占位符 ?
  • MyBatis:#{} 预编译,自动转义
  • 禁止 ${} 直接拼接字符串
② 严格区分 #{} 和 ${}
  • #{}预编译、参数绑定、防注入,日常优先用
  • ${}:纯字符串拼接,极易注入,仅用于动态表名 / 排序字段

注:

  • 为什么 #{} 能防注入?

底层采用预编译机制,参数单独绑定,不会把参数当成 SQL 语句执行。

  • 必须用 ${} 时怎么防注入?

后端做白名单校验,限定只能传入指定合法值,拒绝任意自定义参数。

③ 入参统一过滤校验
  • 非法字符拦截:and/or/union/select/drop/-- 等关键字
  • 正则限定格式:手机号、账号、数字类型强匹配
  • 长度限制,拒绝超长恶意参数
④ 数据库层面防护
  • 业务账号最小权限,不给 drop、alter 等高权限
  • 关闭不必要存储过程
  • 禁止外网直连数据库
⑤ 后端逻辑层管控
  • 禁止前端直接传表名、字段名、排序字段
  • 排序、分页字段后端枚举固定,不接收前端原生参数
  • 分页、查询条件强制后端组装

5. XSS、CSRF 防护

(1) XSS 跨站脚本攻击

原理: 注入恶意 JS 代码 ,用户访问页面自动执行,窃取 Cookie、账号、跳转钓鱼网站

防护方案:

  • 前端转义: 输入框特殊字符转义,< > & " ' 替换过滤
  • 后端统一过滤: 接收参数过滤脚本标签、scriptiframe
  • **输出编码:**页面渲染数据时 HTML 实体编码
  • **设置 Cookie HttpOnly:**禁止 JS 读取 Cookie,杜绝会话窃取
  • **CSP 内容安全策略:**限制页面仅加载指定域名资源

(2) CSRF 跨站请求伪造

**原理:**利用用户已登录 Cookie,诱导用户在第三方网站悄悄发起请求,冒充用户操作。

防护方案:

  • **核心:请求令牌 Token。**后端生成随机令牌存入 Session,表单 / 请求头携带,后端比对校验
  • **校验请求来源:**校验 Referer、Origin 域名,拒绝陌生站点请求
  • **添加验证码 / 短信验证:**高危操作(改密码、支付、解绑)强制验证
  • **双重 Cookie 校验:**Cookie 放随机值,请求头再携带一份比对
  • **接口使用 POST + 状态校验:**重要接口禁止 GET 请求

二、数据传输与存储安全

1. HTTPS加密传输

前后端接口、外网接口统一使用 HTTPS 加密传输。

  • HTTP 是明文传输,端口 80,速度快但不安全,容易被抓包篡改;
  • HTTPS 在 HTTP 基础上加了 SSL 加密,端口 443,需要安全证书,全程密文通信。

(1) HTTPS 加密过程

客户端与服务端协商秘钥,之后所有数据对称加密传输

(2) 常见 HTTP/HTTPS 状态码

  • 2xx 成功
  • 3xx 重定向
  • 4xx 客户端错误(前端 / 请求问题)
  • 5xx 服务端错误(后端服务器问题)

(3) 常见问题

  • 401 和 403 区别:401 没登录;403 已登录没权限
  • 502 一般是:后端服务没启动、端口不通、服务挂了

2. 加密存储

用户密码加密存储,严禁明文保存。

(1) 不可逆加密(只存不解密)

用途:用户密码、登录密钥

常用算法:BCrypt、SHA-256 校验

特点:

  • 明文加密后无法还原
  • 登录时:明文加密 → 和库中密文比对
  • 安全极高,不怕数据泄露

严禁使用:单纯 MD5(容易彩虹表破解)

(2) 可逆对称加密(需要解密使用)

用途:身份证、银行卡、手机号、地址 常用算法:AES特点:

  • 加密存入数据库,业务使用时解密取出
  • 加解密共用同一密钥
  • 密钥必须单独保管,不能放代码

注:

**为什么密码不用 AES?**密码不需要解密,不可逆更安全,就算库被盗也无法破解原始密码。

对称加密密钥放哪里? 放配置中心、环境变量,绝不硬编码写死在代码里

相关推荐
bitbrowser3 小时前
如何在电脑端安全实现 Signal 隔离多开?
安全·电脑
星幻元宇VR3 小时前
VR科普大空间|法治、禁毒、消防一体化沉浸式教育新模式
科技·学习·安全·vr·虚拟现实
wanhengidc3 小时前
虚拟主机与服务器的区别
运维·服务器·安全·web安全·智能手机
Coremail邮件安全3 小时前
93号文核查攻坚|金融邮件安全:从合规承压到实战突围
安全·金融
weixin_514253183 小时前
5-18-patch-qwen3.5-4b
安全
@insist1233 小时前
信息安全工程师-交换机 / 路由器加固与漏洞管理全流程
网络·安全·智能路由器·软考·信息安全工程师·软件水平考试
Dola_Zou3 小时前
医疗装备的出海安全底座
安全·自动化·软件工程·软件加密
前端技术3 小时前
大模型安全全景解析——从DeepSeek看AI伦理与未来挑战
人工智能·python·安全
jiajia_lisa4 小时前
金融涉外业务赋能,守护跨境金融安全
安全