目录

生产环境对于文件服务注意事项

生产环境对于文件服务,尤其是对外提供访问的场景,需要注意以下几点,以防止伪装文件被解析执行等安全风险,从而被黑产利用上传恶意文件,如上传 html 作为钓鱼、菠菜、跳转 进行传播,利用你的域名当作跳板,导致域名封、通报、用户上当受骗等问题。

Nginx 访问限制与安全加固方案

一、限制非图片文件访问

仅允许访问指定图片格式,如有其他格式也是类似新增。
目的:防止伪装文件被解析执行。但这种方式无法完全杜绝风险,需要结合其他手段。

if ($uri !~* \.(jpg|jpeg|png|gif)$) {
    return 403;
}

二、结合 Referer 进行访问限制

通过校验 Referer 来源域名,同时限制文件类型:

location /uploads/ {
    # 校验 Referer 是否来自允许的域名
    if ($http_referer !~* "^https://your-mini-program-domain\.com") {
        return 403;
    }

    # 限制非图片文件访问
    if ($uri !~* \.(jpg|jpeg|png|gif)$) {
        return 403;
    }
}

三、结合 Token 验证(后端代理文件请求方式)

仅允许携带合法 Token 的请求访问资源,适用于私有资源或鉴权场景。

可参考文章:基于S3协议对外分享文件权限管理方案-后端代理文件请求


四、文件访问签名验证(S3方式)

通过签名 URL(Pre-Signed URL)控制访问权限,仅允许在有效期内通过合法签名访问文件。

可参考文章:基于S3协议对外分享文件权限管理方案-基于预签名-url


五、临时凭证(STS)与策略控制(S3方式)

使用 STS 动态下发临时凭证,通过策略实现细粒度、时效性的权限分配。

可参考文章:基于S3协议对外分享文件权限管理方案-基于临时凭证sts


六、上传接口安全过滤

从上传入口进行多重校验,降低伪装文件风险:

  1. 文件扩展名过滤

  2. MIME 类型校验

  3. 图片内容校验(如 ImageIO 读取)

  4. 读取文件前几个字节,判断是否符合常见图片格式特征(如 魔术字节)


七、基于用户权限开放接口

从接口层面进行权限控制,不同用户仅允许访问授权资源。


八、记录上传者信息

保留上传用户、时间、IP 等审计信息,便于追溯和风控。


九、屏蔽国外 IP

通过 Nginx、WAF 或防火墙策略限制特定国家或地区 IP 的访问。


十、响应内容增加安全头

即使文件被伪装访问,通过严格的安全响应头降低被解析和执行的风险。

常用安全头配置

  • Content-Security-Policy:限制资源加载和脚本执行

    add_header Content-Security-Policy "default-src 'none';";
  • X-Content-Type-Options:禁止浏览器进行 MIME 类型嗅探

    add_header X-Content-Type-Options "nosniff";
  • X-Frame-Options:防止内容被嵌入 iframe

    add_header X-Frame-Options "DENY";

十一、整体防护策略总结

为全面防止伪装文件被解析,可从多个阶段进行控制:

  1. 上传阶段:校验真实文件类型和内容

  2. 存储阶段:限制敏感文件的存储路径与公开访问

  3. 响应阶段:增加安全头部和浏览器策略限制


十二、Nginx 拦截 Spring Boot Actuator

直接在 Nginx 层拦截敏感端点:

location /api/actuator {
    return 403;
}

十三、关闭或限制 API 文档、Swagger、Actuator

通过配置彻底禁用 Actuator HTTP 访问端口:

--- # Actuator 监控端点配置
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: ALWAYS
    logfile:
      external-file: ./logs/sys-console.log
  server:
    port: -1 # 设置为 -1,禁用 Actuator HTTP 端口

S3协议,拦截