You need to enable JavaScript to run this app. 在Express(Node.js)中如何安全存储与使用用户上传文件
优惠活动
大模型
产品
解决方案
定价
更多

在Express(Node.js)中如何安全存储与使用用户上传文件

Express用户上传文件存储相关问题解答

1. 将用户敏感信息文件存储在public(静态)目录是否安全可行?

完全不可行,存在极大安全风险。public目录下的所有资源默认开启无鉴权的公开访问,只要获取到文件路径就能直接下载内容,哪怕你把路径命名规则做的再复杂,也存在路径遍历、字典爆破的可能,成绩、隐私证件这类敏感文件存在这里,很容易出现大规模的敏感数据泄露。

2. 如果不可行,除了存入数据库之外,还有哪些安全存储文件的方案?

  • 存储到服务端非公开目录:在项目根目录新建独立的private_uploads类文件夹,不要将其配置为Express的静态资源托管目录。用户请求文件时,必须先走自定义的业务鉴权接口,校验登录态、访问权限,确认当前用户有权限读取目标文件后,再调用res.sendFile()方法返回文件内容,完全阻断直接访问文件的路径。
  • 本地加密存储:上传文件时先使用AES等对称加密算法对文件内容加密后再写入磁盘,读取文件时先解密再返回给前端,哪怕出现磁盘文件泄露的情况,攻击者拿到加密后的文件也无法解析出原始内容。
  • 私有对象存储:使用云服务商的对象存储服务,将敏感文件存入设置了私有读写权限的存储桶,用户访问时需要后端生成带有效期的签名URL,超出有效期或者权限不符的请求都会被存储服务直接拦截。

3. 实际商用网站通常会将用户敏感文件存储在哪里?是和main.js等服务端文件同目录,还是部署在独立的服务器上?

商用场景基本不会将用户上传文件和业务服务代码(比如main.js这类服务端文件)放在同一目录甚至同一台服务器,通常会按文件敏感程度分开部署:

  • 非敏感公开文件(比如允许公开访问的用户头像、分享物料等):一般存储在独立的对象存储服务,绑定CDN做访问加速,和业务服务完全隔离。
  • 敏感隐私文件:要么存储在加密的私有对象存储桶,要么存储在独立的专属文件存储集群,和业务服务、公网之间做多层权限隔离,避免业务服务被攻破后直接泄露所有用户文件。

这种部署方式除了安全层面的考虑,也方便独立扩容,文件存储的容量需求和业务服务的算力需求增长逻辑不同,分开部署可以避免文件占满磁盘影响业务服务正常运行。


内容的提问来源于stack exchange,提问作者SMS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 04:54:00