Linux 信号处理别塞业务逻辑:异步安全、Self-Pipe 与 signalfd

Linux 信号进入事件循环

进程收到 SIGTERM 后要停止接流量,收到 SIGHUP 后要重载配置,看起来只需注册两个回调。然而信号处理函数会在不可预测的指令之间打断程序;若在里面加锁、分配内存或写日志,偶发死锁和状态损坏便可能随之而来。稳妥的思路是:处理函数只负责通知,把真正的工作交还主循环。

Read More

别把 SameSite 当万能药:CSRF 防护的令牌、来源校验与上线清单

浏览器请求穿过多层 CSRF 防线

用户已经登录的站点若用 Cookie 保存身份,浏览器会在满足条件时自动带上它。攻击者不必偷到 Cookie,只要诱导用户在另一个站点提交表单,就可能让目标站点误以为这是用户本人的转账、改邮箱或解绑操作。这就是跨站请求伪造(CSRF)。可靠的防护不是单押某个响应头,而是先缩小 Cookie 的跨站发送范围,再让服务端验证请求确实来自自己的页面。

Read More

HTTP 缓存别靠猜:Cache-Control、Vary 与条件请求实战

浏览器、CDN 与源站组成的 HTTP 缓存链路

页面明明更新了,用户却仍看到旧内容;接口接入 CDN 后,不同用户的数据竟然互相串了;静态资源每次访问都重新下载。此类问题往往不是“缓存失效了”,而是响应没有说清楚谁能缓存、能用多久,以及哪些请求对应同一份表示。HTTP 已提供完整的表达方式,关键是把策略写成可验证的响应契约。

Read More

异步任务别“放养”:用结构化并发收拢生命周期、取消与超时

结构化并发将异步任务约束在清晰的作用域中

一次请求同时查询库存、用户和优惠信息,看似只要创建三个异步任务就能提速。但如果请求已经失败,其中一个任务仍在后台写数据;或者主协程被取消,子任务却继续占用连接,并发就从性能工具变成了隐形故障源。结构化并发的核心不是某个库,而是一条所有权规则:任务必须属于一个明确的作用域,离开作用域前必须全部成功、失败或被取消。

Read More