程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
软件定制开发/软件按需定制 技术文章 · 第13页
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
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
Staticcheck 2026.2.2 升上去:SA4023 重写会翻转旧结论,SA5011 被停用
编程
Staticcheck 2026.2.2 升上去:SA4023 重写会翻转旧结论,SA5011 被停用
2026-10-26 00:03:45
Staticcheck 2026.2 重写了 SA4023、停用 SA5011、新增 SA9010,升级后同一份代码的告警会增减甚至翻转。这篇按检查分组列出实际变化:SA1019 覆盖结构体字面量弃用字段、SA4006 支持复合赋值、U1000 泛型误报减少、S1005 放宽 map 索引,以及 2026.2.1/2026.2.2 连修的三处崩溃,最后给升级核对顺序与命令。
staticcheck
Go
lint
SA4023
SA5011
SA9010
代码质量
OpenQodex:push 前用 22 个扫描器加独立 Claude Code / Codex 进程复审改动
代码
OpenQodex:push 前用 22 个扫描器加独立 Claude Code / Codex 进程复审改动
2026-10-25 21:31:50
OpenQodex 在本机、push 之前审查未推送的 commit 和未提交改动:先跑 22 个无模型扫描器,再起独立的 Claude Code / Codex 进程做 finder 与 verifier,引用必须被脚本核对、每条 finding 必须被回答。含安装命令、push gate 的能力边界,以及它在真实 PR 基准上 semantic recall 只有 5.2% 的弱项。
代码审查
AI
Agent
工程效率
开源项目
Git
git-ai:几十个 agent 抢同一个分支,把 merge queue 换成 compare-and-swap
编程
git-ai:几十个 agent 抢同一个分支,把 merge queue 换成 compare-and-swap
2026-10-25 21:31:02
git-ai 是照着 Anthropic Scion 公开设计写的 Go 版本控制系统,fork 自 Gitaly:用 compare-and-swap 和批次落地替代 merge queue,changeset log 记录每次更新与执行者,模型解冲突只算 proposal、必须过 verify.command 才落地。含 50 agent 并发落地的 benchmark 数据、构建步骤与当前限制。
Git
AI
Agent
Go
开源项目
版本控制
TypeScript 7.0 Beta 迁移笔记:tsconfig 默认值、硬错误清单与 Strada API 空窗
代码
TypeScript 7.0 Beta 迁移笔记:tsconfig 默认值、硬错误清单与 Strada API 空窗
2026-10-25 21:08:24
TypeScript 7.0 的 tsc 换成 Go 移植版后,真正的迁移成本在配置与工具链:rootDir 默认 ./, types 变成空数组, baseUrl/ es5 / node 解析全部降为硬错误,而 Strada API 空窗让 typescript-eslint 只能用 npm 别名留在 6.0。附迁移顺序。
TypeScript
前端工程
构建工具
迁移
OpenSSH 10.6 关闭 LZ77 字典编码:压缩还在,但不再能当保密手段
资讯
OpenSSH 10.6 关闭 LZ77 字典编码:压缩还在,但不再能当保密手段
2026-10-25 21:07:23
OpenSSH 10.6 默认关闭 LZ77 字典编码,以缓解多路复用通道共享压缩上下文导致的明文恢复侧信道。本文说明攻击机制、Compression 选项现在还剩什么、命令行用户名拒绝 $ 与 \ 的影响面,以及 scp -R 弃用后的迁移点。
OpenSSH
安全
运维
SSH
Stripe webhook 升级 API 版本:先建一个 disabled 端点做双投递,老端点回 400 保留回滚
编程
Stripe webhook 升级 API 版本:先建一个 disabled 端点做双投递,老端点回 400 保留回滚
2026-10-25 21:06:31
Stripe 每个 webhook 端点各自钉住 API 版本,升版本要连带升级端点。本文给出六步灰度流程:同 URL 加 ?version= 新建 disabled 端点、两边同时投递时忽略与 200/400 的取舍、Go/Java/.NET SDK 版本必须与端点一致,以及用 thin events 绕开版本。
Stripe
webhook
支付
API
MySQL 26.10 让 EXPLAIN TREE 和 JSON v2 输出显示分区裁剪结果
编程
MySQL 26.10 让 EXPLAIN TREE 和 JSON v2 输出显示分区裁剪结果
2026-10-25 21:04:46
MySQL 26.10.0 让迭代器版 EXPLAIN 也能看到分区裁剪:FORMAT=TREE 与 EXPLAIN ANALYZE 把分区名写进操作文本,JSON v2 给 partitions 数组,传统 EXPLAIN 与 JSON v1 不变。附 RANGE 分区表五步自查流程与「计划期候选读集」的边界。
MySQL
EXPLAIN
分区
优化器
nginx 1.30.6 与 1.31.7 修复 5 个 CVE:`alias`+`rewrite`、AIO+SSI 两类配置需要优先自查
资讯
nginx 1.30.6 与 1.31.7 修复 5 个 CVE:`alias`+`rewrite`、AIO+SSI 两类配置需要优先自查
2026-10-25 21:04:03
nginx-1.30.6 与 1.31.7 修复 5 个 CVE,其中 3 个 CVSS 9.2。本文给出受影响版本区间、F5 公告里的具体触发配置(alias+rewrite+$request_filename、map 正则捕获前置引用、AIO+SSI)、三种临时缓解写法,以及哪些默认配置可以先排期升级。
nginx
安全
运维
CVE
PHP 8.6 的部分函数应用:`?` 与 `...` 占位符、变长规则与管道下的零开销
编程
PHP 8.6 的部分函数应用:`?` 与 `...` 占位符、变长规则与管道下的零开销
2026-10-25 21:03:15
PHP 8.6 引入部分函数应用(PFA):用 ? 和 ... 占位符从任意可调用生成闭包。本文给出占位符语义、变长参数三条附加规则、命名实参重排、四类典型报错原文,以及管道运算符右侧能优化成直接调用、闭包根本不创建的条件。
PHP
闭包
RFC
语法特性
gopls v0.24.0 的交互式重构:以前加 struct tag 只能默认 json + camelCase
编程
gopls v0.24.0 的交互式重构:以前加 struct tag 只能默认 json + camelCase
2026-10-25 21:02:18
gopls v0.24.0 起支持交互式重构:LSP 提案让语言服务器在算编辑前先问参数。本文拆「Add struct tags」从只能默认 json+camelCase 到可选 tag 组合与命名约定、泛型接口自动生成方法桩、跨包移动声明时如何只带走 Foo 用到的符号与 import。
Go
gopls
LSP
重构
MySQL 版本号变成四段,VERSION() 还返回三段:巡检、CMDB 和备份命名要改哪几行
编程
MySQL 版本号变成四段,VERSION() 还返回三段:巡检、CMDB 和备份命名要改哪几行
2026-10-25 20:02:43
MySQL 开始支持四段版本号 MAJOR.MINOR.PATCH.UPDATE,但 VERSION()、@@version、握手包和数字版本 ID 仍保持三段语义。结果是巡检、CMDB、备份命名、发布核对这些靠解析版本号的脚本区分不出同一 patch line 上分批交付的 update。本文给出 VERSION_WITH_UPDATE()、@@version_with_update、mysqld --version-with-update 三种取法,以及老实例上的兜底探测写法。
MySQL
运维
版本管理
巡检脚本
升级
go fix 一行没改:go 指令门槛、四个新 modernizer 与默认关掉的那四个
编程
go fix 一行没改:go 指令门槛、四个新 modernizer 与默认关掉的那四个
2026-10-25 20:01:41
升级 Go 工具链后跑 go fix ./... 却没改动任何文件,通常是 go.mod 的 go 指令没跨过 modernizer 的版本门槛。本文给出 -diff 预览、分批 review、多平台各跑一遍的正确用法,拆解 atomictypes、embedlit、slicesbackward、unsafefuncs 的替换规则,并说明 appendclipped、bloop、fmtappendf、slicesdelete 为什么被默认关闭。
Go
go
fix
modernizer
工具链
代码重构
Stripe Connect 退款成功、平台余额却变负:reverse_transfer 和 refund_application_fee 决定钱从谁那扣
代码
Stripe Connect 退款成功、平台余额却变负:reverse_transfer 和 refund_application_fee 决定钱从谁那扣
2026-10-25 09:01:33
Stripe Connect 里退款接口返回成功、平台余额却变成负数,或子账户的钱追不回来,多数不是退款失败,而是 reverse_transfer 与 refund_application_fee 没开对。本文按 direct / destination / separate charges and transfers 三种扣费模型,拆清退款与拒付到底从谁的余额扣、部分退款如何按比例反向、两种「余额不足」为何一个 pending 一个直接报错,并给出 source_transaction、ACH/SEPA 例外与本地对账字段。
Stripe
支付对接
分账
退款
出海
对账
Intl.DateTimeFormat 的 dateStyle 与单组件互斥:容器里差 8 小时与 hourCycle 的 0/1 起点
案例
Intl.DateTimeFormat 的 dateStyle 与单组件互斥:容器里差 8 小时与 hourCycle 的 0/1 起点
2026-10-25 00:06:07
Intl.DateTimeFormat 有两类不会提示的失败:dateStyle/timeStyle 与 hour、year 等单组件同时写会直接抛 TypeError;timeZone 默认取运行时时区,容器里通常 UTC,服务器与浏览器输出就差 8 小时。文中给出互斥规则与 resolvedOptions 不展开的原因、IANA 与偏移两种时区写法、h11/h12/h23/h24 的起点差异与 hour12 的覆盖顺序,并附一段可跑的断言脚本。
Intl
Intl.DateTimeFormat
i18n
国际化
前端
JavaScript
时区
MySQL 报 1461 不是连接数问题:max_prepared_stmt_count 的 16382 配额被谁吃掉了
编程
MySQL 报 1461 不是连接数问题:max_prepared_stmt_count 的 16382 配额被谁吃掉了
2026-10-25 00:05:49
MySQL 报 1461 时先别急着调大参数:max_prepared_stmt_count 是 mysqld 全局配额(默认 16382,每条至少 8KB),一个连接就能吃光。按五类消耗形态分型,给出 Prepared_stmt_count、Com_stmt_* 差值与 performance_schema.prepared_statements_instances 的定位顺序,以及 PHP PDO 默认 emulate 下调大也无效的边界。
MySQL
max_prepared_statements
prepared
statement
preparedstatement
1461
数据库运维
连接池
Intl.NumberFormat 位数与舍入:只设 minFrac 会把 maxFrac 定成 3,分组符也不一定是空格
编程
Intl.NumberFormat 位数与舍入:只设 minFrac 会把 maxFrac 定成 3,分组符也不一定是空格
2026-10-25 00:04:53
Intl.NumberFormat 的位数与舍入选项有大量会静默生效的默认值:只写 minimumFractionDigits 会把 maximumFractionDigits 定成 3,roundingIncrement 不给 maxFrac 就被压成 0,旧引擎还会直接忽略 roundingMode。文中列出默认值表、九种舍入模式对照、0.05/0.1 舍入写法、fr-FR 的 U+202F 分组符,以及一套 resolvedOptions 自检与排查顺序。</description> <||DSML|| parameter name="keywords" string="true">Intl.NumberFormat|IntlNumberFormat|roundingMode|roundingIncrement|trailingZeroDisplay|roundingPriority|i18n|前端国际化|金额格式化
Intl
Intl.NumberFormat
i18n
国际化
前端
JavaScript
ICU
把 Vue 2 老项目搬上 Vue 3:@vue/compat 迁移层、Vite 白屏与 7 步上线顺序
编程
把 Vue 2 老项目搬上 Vue 3:@vue/compat 迁移层、Vite 白屏与 7 步上线顺序
2026-10-25 00:04:22
Vue 2 已于 2023-12-31 EOL,真正拖时间的是插件生态与工具链。本文给出「Vue 2 语法 + Vue 3 引擎」的最小可交付目标,拆解 @vue/compat 迁移构建、Vite 下 alias 导致白屏的修法,以及 filters、$listeners、slot-scope、Vue.set、事件总线等六类移除 API 的分型对照,最后是一套可回滚的 7 步升级顺序。
前端升级
Vue
Vue3
迁移
前端工程
幂等键有保质期:Idempotency-Key 过期后,同一个键的重试就是一次新请求
编程
幂等键有保质期:Idempotency-Key 过期后,同一个键的重试就是一次新请求
2026-10-25 00:04:12
重复扣款的根因常常不是中间件写错,而是没人定义过幂等键能活多久。这篇按 IETF draft-ietf-httpapi-idempotency-key-header-08 讲清 400/409/422 的分工、Structured Field 值的引号坑、保留期与客户端重试窗口/对账窗口怎么嵌套,给出 PostgreSQL 表与 Go 抢占-比对指纹-回放响应的实现,并把 Stripe API v1 的 24 小时与 v2 的 30 天差异对上。
幂等键
Idempotency-Key
幂等防重
重放窗口
接口设计
Go
PostgreSQL
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
…
10
11
12
13
14
15
16
…
349
下一页
共 349 页
到第
页
确定