如何保障Node.js后端API的数据安全?
后端接口安全与鉴权问题解答
防止第三方工具恶意调用接口的核心方案
你提到的通过Insomnia等工具直接调用接口窃取敏感数据的问题,可通过以下几个基础安全规则解决:
- 绝对不在任何接口响应中返回密码相关内容:不管登录成功还是失败,响应体仅返回操作状态、错误提示、用户非敏感信息(如昵称、头像),密码仅做校验用,全程不会出现在响应数据中。
- 数据库存储密码必须使用不可逆加盐哈希算法:比如
bcrypt、Argon2,禁止存储明文密码,哪怕数据库被拖库也不会泄露用户真实密码。 - 所有非公开接口必须添加鉴权校验:仅携带有效鉴权凭证的请求才能获取对应数据,无凭证/无效凭证直接返回401状态码拒绝访问。
- 登录接口添加限流、验证码防护:比如同一IP1分钟内最多请求5次登录接口,连续3次登录失败要求输入验证码,防止攻击者暴力枚举账号密码。
express-session相关疑问解答
1. 多用户同时登录的session运行逻辑
不会出现多用户session覆盖的问题,这套机制的运行逻辑天生支持多用户隔离:
- 当用户首次请求服务端时,服务端会生成全局唯一的
session ID,通过Set-Cookie响应头返回给用户浏览器,浏览器后续所有同域名的请求都会自动携带这个Cookie。 - 服务端根据请求携带的
session ID匹配存储在服务端的对应session数据,每个用户的session ID完全独立,因此可以准确识别不同的登录账号,不会出现互相覆盖的情况。 - 如果是前后端分离跨域部署的场景,需要前端开启请求的
withCredentials: true配置,后端配置对应的CORS规则允许携带Cookie,就能保证session正常识别用户身份。
2. 攻击者直接调用登录接口会不会拿到敏感数据
只要遵循安全开发规范,攻击者哪怕直接调用登录接口也无法获取敏感数据:
- 登录校验的逻辑是:前端传输账号和明文密码到后端,后端取出数据库中该账号对应的加盐哈希密码,用同样的算法对前端传过来的明文密码计算哈希值,两者对比一致则判定登录成功,全程不需要返回任何密码相关内容。
- 登录接口的响应仅包含登录状态、鉴权凭证、非敏感用户信息,不会携带密码、身份证号等敏感字段,不存在被窃取的可能。
- 额外建议全站部署HTTPS,避免请求在传输过程中被窃听,防止攻击者截获前端传输的明文密码。
内容的提问来源于stack exchange,提问作者optionalfigure
相关产品推荐
相关产品推荐

