Hasty Briefsbeta

双语

The way CTRL-C in Postgres CLI cancels queries is incredibly hack-y

2 months ago
  • #Database
  • #Postgres
  • #Security
  • Postgres查询可能因多种原因被取消,例如执行时间过长、缺少索引或SQL错误。
  • 在psql中取消查询会通过新连接发送CancelRequest,该请求由进程ID和密钥标识。
  • 默认情况下CancelRequest以明文发送,存在安全风险,包括潜在的拒绝服务攻击。
  • Postgres 17引入了加密CancelRequest支持,但由于架构限制,psql仍使用未加密消息。
  • 协议v3.2允许使用更长的密钥防止暴力破解,但需要显式配置。
  • 攻击者可重放未加密的CancelRequest来取消同一连接上的后续查询。
  • Postgres流量监控工具Elephantshark最初难以处理并发连接和未加密CancelRequest。
  • 解决方案涉及将进程ID和密钥映射到目标主机名以正确处理CancelRequest。
  • 安全建议包括:使用Postgres 18并设置min_protocol_version=3.2、启用VPN、避免在psql中使用Ctrl-C。
  • 未来更新可能为psql引入加密CancelRequest功能以提升安全性。