程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
软件定制开发/软件按需定制 技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
支付宝异步通知验签一直 false:多数是二次 URLDecode 和公钥拿错
代码
支付宝异步通知验签一直 false:多数是二次 URLDecode 和公钥拿错
2026-10-27 09:01:24
支付回调验签不通过、订单一直停在待支付时,按待验签串的实际拼法逐项排查:二次 URLDecode 把 passback_params 的 %3d 解坏、alipay_public_key 拿成了应用公钥、charset 用错、空值参数与末尾换行。给出 openssl 手动验签命令、PHP/Go 验签片段,以及验签通过后仍必须做的四项业务校验、success 应答与重试节奏。
支付宝
异步通知
验签
接口对接
支付排障
RSA2
Beszel 部署排障笔记:两条连接通道、unix socket 与几处静默失败
编程
Beszel 部署排障笔记:两条连接通道、unix socket 与几处静默失败
2026-10-27 00:05:02
Beszel 的 hub/agent 双通道模型决定了排障顺序:同机部署为什么 localhost 不通、host network 与 rootless 容器丢哪些指标、FILESYSTEM/NICS/SMART 必须显式设置的值,以及反代 gzip 掐断 SSE、自签 CA、TRUSTED_AUTH_HEADER 这几个静默失败点。
Beszel
服务器监控
Docker
运维排障
Go
docker-mailserver v15 → v16:四处静默失效与升级顺序
编程
docker-mailserver v15 → v16:四处静默失效与升级顺序
2026-10-27 00:05:00
docker-mailserver 从 v15 升到 v16,基础镜像换 Debian 13、Dovecot 2.3→2.4。本文按版本分层列出四处会静默失效的地方:2.3 语法 dovecot.cf 不加载、dhparams.pem 被无声忽略、DKIM 密钥改名与 dkim_signing.conf 模板不匹配、Redis 换 Valkey 后 Rspamd Bayes 需重学,并给出升级检查清单与回滚边界。
邮件服务器
docker-mailserver
Dovecot
Rspamd
Postfix
bcrypt 的 72 字节是截断点:Go 报错、PHP 静默截断、WordPress 先 HMAC 再哈希
编程
bcrypt 的 72 字节是截断点:Go 报错、PHP 静默截断、WordPress 先 HMAC 再哈希
2026-10-27 00:04:17
bcrypt 只把前 72 字节送进 Blowfish 密钥调度,第 73 字节起不参与运算。三套实现态度不同:Go 的 GenerateFromPassword 返回 ErrPasswordTooLong,但 CompareHashAndPassword 不检查长度;PHP 只拦 NUL 字节,超长交给 crypt() 截断;WordPress 6.8 先用 HMAC-SHA384 + base64 压到 64 字符再哈希,输出带 $wp 前缀。给出可复现代码、cost 与 rehash 升级做法,以及 OWASP 当前参数值。
bcrypt
密码哈希
Go
PHP
安全
append-only 仓库里 keep-weekly 会删掉合法快照:restic forget 的保留策略与 --keep-within
编程
append-only 仓库里 keep-weekly 会删掉合法快照:restic forget 的保留策略与 --keep-within
2026-10-27 00:03:59
restic 的 forget 只摘快照,prune 才回收数据;在 append-only 仓库里用 keep-weekly/keep-daily 会被垃圾快照挤掉合法备份,应改用 --keep-within。整理策略选项、自然时间边界与分组语义,并给出 prune 加锁、重打包开销与磁盘满时的救援路径。
运维实战
restic
备份恢复
prune
Linux运维
PocketBase v0.40.6:缩略图有了像素上限,更新命令也不再走 GitHub
资讯
PocketBase v0.40.6:缩略图有了像素上限,更新命令也不再走 GitHub
2026-10-26 21:34:24
PocketBase v0.40.6 把缩略图生成的像素上限做成全局限制(默认 250<<20,PB_THUMBS_MAX_SOURCE_PIXELS 可调),根因是 Go image.Decode 缺少解码选项;同时更新命令改为从 ganigeorgiev.com 拉版本,这很可能是 GitHub 上最后一个 release。附 CI 与上传入口的改动建议。
Go
PocketBase
后端
发布说明
pkg.go.dev 开放查询 API:GET-only、/v1beta,包路径有歧义时必须显式指定 module
编程
pkg.go.dev 开放查询 API:GET-only、/v1beta,包路径有歧义时必须显式指定 module
2026-10-26 21:33:41
pkg.go.dev 官方查询 API 的工程笔记:GET-only /v1beta 端点、OpenAPI 契约、version 参数解析伪版本的规则,以及「精度优先」带来的坑——包路径存在于多个模块时 API 会报歧义错误,必须显式带 module。附 curl 输出字段和 pkgsite-cli 的安装与用法。
Go
工具链
API
包管理
Redis 这几个 RCE 都写着「需要已认证」:把 ACL 当边界,比只绑 127.0.0.1 更接近实际
编程
Redis 这几个 RCE 都写着「需要已认证」:把 ACL 当边界,比只绑 127.0.0.1 更接近实际
2026-10-26 21:07:45
RESTORE 反序列化、Lua use-after-free、阻塞客户端驱逐三条可导致 RCE 的 advisory 前置条件都写着「已认证用户」。只绑 127.0.0.1 解决的是谁能连上,不是能做什么。这篇给 Redis 8.10.3 的 cluster bus 4GB PUBLISH 修复背景,以及账号粒度的 ACL 写法与 ACL LOG 观察方法。
Redis
安全
运维
MySQL 里跑 JavaScript 不是让你把业务搬进数据库:Percona 的 component_js_lang 只补 SQL 缺的那几步
编程
MySQL 里跑 JavaScript 不是让你把业务搬进数据库:Percona 的 component_js_lang 只补 SQL 缺的那几步
2026-10-26 21:06:52
Percona 的 component_js_lang 让 MySQL 8.4 里能写 V8 JavaScript 函数,但引擎砍掉了网络、文件、npm 和 async,只留纯函数。这篇讲它真正补的是 SQL 表达不了的几步:未知形状递归、数组、29 位大整数、带聚合的迭代,并用四个 demo 的实测数字说明边界与授权方式。
MySQL
数据库
JavaScript
Stripe 新版删掉 payment_method_types:Checkout 与 Elements 升级到 2026-09-30.endive 要改哪几行
编程
Stripe 新版删掉 payment_method_types:Checkout 与 Elements 升级到 2026-09-30.endive 要改哪几行
2026-10-26 21:06:42
Stripe 的 2026-09-30.endive 把 Checkout Sessions、Payment Intents、Setup Intents 的 payment_method_types 以及 Elements 的 paymentMethodTypes 一起移除,改由 Dashboard 的动态支付方式与 allowed/excluded 参数决定。这篇给出要改的代码、SDK 版本锁定写法,以及测试生产配置不同步、webhook 依赖旧字段这几处坑。
支付
Stripe
接口对接
PXC 升到 8.0 后每 30 秒一阵巨量磁盘写:Linux 大 folio 遇上 mmap 的 Galera cache
案例
PXC 升到 8.0 后每 30 秒一阵巨量磁盘写:Linux 大 folio 遇上 mmap 的 Galera cache
2026-10-26 21:05:55
PXC 5.7 升 8.0 后各节点每 30 多秒爆发几 GB 磁盘写,MySQL 统计却解释不了。责任线程全落在 Galera 接收与应用线程上,真因是操作系统同时升到内核 6.1:大 folio 加 mmap 写回只能整 folio 刷盘,而 Galera cache 正是 mmap 文件。文里给线程写入占比、自查命令与五种 workaround。
MySQL
运维
Linux
性能排查
Composer 2.11 加了个 cooldown:新版本先别急着装,dist 也不再回退到 source
编程
Composer 2.11 加了个 cooldown:新版本先别急着装,dist 也不再回退到 source
2026-10-26 21:05:48
Composer 2.11.0-RC1 加了 cooldown 策略,把刚发布的新版本挡在配置窗口外,降低被投毒 release 打中的概率;同时移除 2.10 的 source-fallback,dist 安装不再回退 source。另有 TLS 拒绝被入侵的 eMudhra 中间证书、bin proxy 转义、429 重试与 HTTP/3 关闭,文末给升级与回滚步骤。
PHP
Composer
依赖管理
安全
Vue 3.6 RC 把异步组件的 200ms 延迟加回来了:loading 闪一下到底该谁管
代码
Vue 3.6 RC 把异步组件的 200ms 延迟加回来了:loading 闪一下到底该谁管
2026-10-26 21:05:48
v3.6.0-rc.13 恢复了异步组件默认 200ms 延迟:loader 在窗口内 resolve 就不渲染 loadingComponent,避免快网络下 skeleton 闪一下。这篇讲 delay 与 timeout、Suspense fallback 的分工,给出限速复现步骤,以及升级后与手写防抖叠加成 400ms 的迁移坑。
Vue
前端
异步组件
jq 1.8.2 一次修了 16 个 CVE:把不可信 JSON 喂给 jq 的代价
编程
jq 1.8.2 一次修了 16 个 CVE:把不可信 JSON 喂给 jq 的代价
2026-10-26 21:05:10
jq 常被塞进流水线解析外部 API、日志和用户上传的 JSON。1.8.2 一次修了 16 个 CVE:路径与 contains 的递归深度、堆溢出与越界读、NUL 截断导致的校验失真、哈希碰撞 DoS。按触发方式分组说明,并给出输入限长、ulimit、深度检查与制品校验的具体写法。
Shell
安全
jq
运维
Traefik ForwardAuth 把 NTLM 身份串给了别人:认证子请求共用连接池,v2.11.60 / v3.7.16 才隔离
编程
Traefik ForwardAuth 把 NTLM 身份串给了别人:认证子请求共用连接池,v2.11.60 / v3.7.16 才隔离
2026-10-26 21:04:24
Traefik ForwardAuth 的认证子请求走所有客户端共享的连接池。当 auth server 用 NTLM 或 Kerberos Negotiate(常见于 IIS Windows 认证)时,A 用户已认证的连接会被复用给 B 的子请求,Traefik 拿到 200 就把 authResponseHeaders 里的身份转给后端。这篇整理受影响版本、排查 curl 命令,以及升级之外的两条降风险做法。
Traefik
安全
运维
网关
Go 1.27 的 HTTP/1 连接复用:不读完 resp.Body 也不会再丢连接,代价是 50ms/256KB 的后台排空
编程
Go 1.27 的 HTTP/1 连接复用:不读完 resp.Body 也不会再丢连接,代价是 50ms/256KB 的后台排空
2026-10-26 21:04:00
同一个只看状态码的 Go 函数,Go 1.26 上打 100 次要 710ms,1.27 上只要 150ms。差别在 HTTP/1 连接复用:响应 body 没读到结尾时旧版本直接弃连接。这篇讲清 RTT 成本、json.Decoder 少读一个换行导致复用失败,以及 1.27 里 Transport 异步排空 50ms/256KB 的行为。
Go
HTTP
性能优化
Caddy 2.11.6 给反代加了默认 idle 超时,SSE 到 60 秒就被切断:2.11.7 修了什么
编程
Caddy 2.11.6 给反代加了默认 idle 超时,SSE 到 60 秒就被切断:2.11.7 修了什么
2026-10-26 21:03:52
Caddy 2.11.6 为缓解 Slowloris 默认加了 idle 读写超时,结果 HTTP/2 反代出现 nil pointer panic、POST 打开的 SSE 在 body 读完后整 60 秒被切断、安静的 SSE 流被写超时重置。2.11.7 修了这些回归,并新增 RFC 10036 的 Incremental 头替代 X-Accel-Buffering。文里给超时配置、flush_interval 写法与排查命令。
Caddy
运维
反向代理
SSE
PIE 1.5:一次装多个 PHP 扩展,--select 取代自动推断,upgrade 不跨大版本
编程
PIE 1.5:一次装多个 PHP 扩展,--select 取代自动推断,upgrade 不跨大版本
2026-10-26 20:03:41
PIE 1.5 的实用变化:一条命令装多个扩展、用 --select=扩展=包名 取代不保证解析结果的 --allow-non-interactive-project-install、pie upgrade 只在原版本约束内升级(^1.1 会升到 1.2.0 但不会到 2.0.0),以及 Sigstore 验证实现与 attestation 库的解耦。
PHP
扩展
工具链
Composer
mod_php 默认配置就能未授权 RCE:PHP 8.5.12 / 8.4.27 修的两个洞
资讯
mod_php 默认配置就能未授权 RCE:PHP 8.5.12 / 8.4.27 修的两个洞
2026-10-26 20:02:35
PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 修掉两个可未认证利用的 RCE:CVE-2026-109618 是 memory_limit 触顶时留下的半初始化数据被当成有效数据,mod_php 默认配置下可复现;CVE-2026-109619 是致命错误把内部指针指向上一请求的内存,同 worker 后续请求踩到 UAF。附升级顺序、CVE/GHSA 编号,以及披露被 Chainguard 提前六小时打破的经过。
PHP
安全
漏洞
运维
mod_php
部分退款被并发退超:把「已退 + 在途」扣在一条条件更新里
代码
部分退款被并发退超:把「已退 + 在途」扣在一条条件更新里
2026-10-26 09:02:23
客服退 100、补偿 worker 退全款,两边并发提交,本地 refunded_amount 最后变成 400。问题不在通道,而在额度是等 SUCCESS 回来才累加。本文给出一套顺序:先用条件更新占住「已退 + 在途」额度,再调退款接口,回执只做带状态门的结算;附占位/结算/释放三段 SQL、三个反模式,以及部分退款 50 次上限、1 分钟间隔、NOT_ENOUGH 不该记成已退这几个通道侧限制。
微信支付
退款
并发控制
条件更新
对账
支付对接
MySQL
乐观锁冲突率接近 0,脏写却仍在发生:一条没推进 version 的 UPDATE 让整套 CAS 静默失效
编程
乐观锁冲突率接近 0,脏写却仍在发生:一条没推进 version 的 UPDATE 让整套 CAS 静默失效
2026-10-26 00:05:11
乐观锁的完整性不取决于并发高低,而取决于每条写入路径是否都推进 version。运维手工 UPDATE、老服务、ORM 全量写回、批量脚本只要漏一条,版本号就停滞,下一个 CAS 会静默覆盖刚写入的数据。本文给出 MySQL BEFORE UPDATE 触发器强制推进的写法(OLD.version+1 vs NEW.version+1 的差别)、先用审计触发器诊断再强制的顺序,以及 PostgreSQL 抛异常版本与取舍。
乐观锁
MySQL
触发器
并发控制
CAS
version
行版本
parentLocales 与 uloc_getParent 不是一回事:en-GB 的父级是 en-001,ICU 截成 en
案例
parentLocales 与 uloc_getParent 不是一回事:en-GB 的父级是 en-001,ICU 截成 en
2026-10-26 00:04:49
ICU 的 uloc_getParent 只按最后一个下划线截断,CLDR 的 parentLocales.json 里 en-GB 却指向 en-001、zh-Hant 指向 und。本文对照两套 parent 语义,梳理 CLDR 45 把 parentLocales 按 component 分表、新增 nonlikelyScript 规则后,只读显式 locales 列表的代码会在哪个版本开始出错,附可跑的对照脚本与升级自查清单。
parentLocales
CLDR
locale
i18n
ICU
国际化
Java
CI 绿灯,扫描器却没跑:ASH v3 的 incomplete scan 判定
编程
CI 绿灯,扫描器却没跑:ASH v3 的 incomplete scan 判定
2026-10-26 00:04:05
CI 里安全扫描退出码 0,不代表真的扫干净了。以 awslabs 的 ASH v3 为例,拆开 incomplete scan 的三类来源:扫描器 MISSING/ERROR 默认让构建失败、Grype 内容库超过 5 天默认失败、要求沙箱但无法沙箱化会被记为 MISSING。附 .ash/ash.yaml 最小配置、pre-commit 接入、uv 工具隔离的版本区间,以及 cdk-nag 扫不到 CDK 模板的已知冲突。
scan
ASH
代码扫描
SAST
SCA
CI
安全扫描
Semgrep
Grype
DevSecOps
同一条 UPDATE,Go 返回 0、Node 返回 1:MySQL 的 changed 与 matched 不是一回事
编程
同一条 UPDATE,Go 返回 0、Node 返回 1:MySQL 的 changed 与 matched 不是一回事
2026-10-26 00:03:57
乐观锁判定踩的坑多半不在 version 字段,而在 affected-rows 语义:MySQL 默认返回实际改动行数,带 CLIENT_FOUND_ROWS 才返回匹配行数。同一个 0 既可能是"没匹配到"也可能是"值没变"。本文对照 go-sql-driver、mysql2、JDBC 的默认值差异,给出 Go 侧判定、连接池拆分与抖动重试写法。
乐观锁
MySQL
并发控制
CAS
Go
RowsAffected
clientFoundRows
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
…
338
下一页
共 338 页
到第
页
确定