检查清单

上线前、调接口、过安全评审时逐条勾选

🚀 上线前检查 (5)

发版前 5 分钟过一遍,能挡掉大部分低级事故

  • 证书还在有效期内,且剩余天数足够

    别只看「浏览器没报错」—— 证书可能 3 天后过期。查一次剩余天数再发。

    打开工具 →
  • 安全响应头齐备

    HSTS / CSP / X-Content-Type-Options 至少要有,缺了会在渗透测试里被记一条。

    打开工具 →
  • 定时任务的 Cron 表达式确实在预期时间触发

    「每天 3 点」和「每 3 小时」是两种完全不同的表达式,用解析器看接下来 5 次执行时间。

    打开工具 →
  • 静态资源带了 hash,缓存策略敢写长

    文件名不带 hash 却设了 1 年缓存,等于用户永远拿不到新版本。

  • 域名解析指向正确,裸域与 www 都能访问

    裸域没有 A 记录是最常见的「上线后只有一半人能打开」。

    打开工具 →

🔌 接口调不通时 (6)

按这个顺序排查,比盯着代码猜快得多

  • JWT 是否已过期(看 exp,而不是猜)

    把 token 解出 payload,exp 是秒级时间戳,和当前时间比一下。

    打开工具 →
  • 时间戳单位搞错了吗(秒 vs 毫秒)

    后端返秒、前端按毫秒算,日期会变成 1970 年或几万年以后。

    打开工具 →
  • Base64 内容能正常解码

    URL 安全变体(-_)与标准变体(+/)混用,解码会静默出错。

    打开工具 →
  • 响应里那个字段到底在哪个路径

    先用 JSON Path 试出来,再写进代码,省得反复改取值的下标。

    打开工具 →
  • 两个环境的返回差异在哪

    把两边的响应贴进结构化对比,直接看是哪个字段不一样,而不是靠肉眼找。

    打开工具 →
  • 参数里的特殊字符转义了吗

    query 里出现 & = # 空格,不转义会被截断成别的参数。

    打开工具 →

🛡️ 证书与安全头自查 (5)

被扫描器判定为「低危」的项目,多半在这里

  • 站点根域与子域都强制 HTTPS

    HSTS 要带 includeSubDomains,否则子域仍可能被降级到 http。

    打开工具 →
  • CORS 没有写成 Access-Control-Allow-Origin: *

    带凭据的接口写 * 浏览器本来就会拒;不带凭据的公开接口写 * 要看是否真的希望任何人调用。

    打开工具 →
  • 凡是接受 URL 的后端接口都做了内网过滤

    只校验域名格式不够,还要校验解析结果 —— 否则 DNS 可以指向 127.0.0.1。

    打开工具 →
  • 证书链完整(不只是叶子证书)

    缺中间证书时,桌面浏览器常常正常而移动端报错 —— 因为桌面缓存过中间证书。

    打开工具 →
  • 内网段规划没有和公网段撞车

    把 192.168.0.0/16 之外的地址当内网用,接 VPN 时会大面积不通。

    打开工具 →