[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fexophh6ivevp":3},{"code":4,"message":5,"data":6,"timestamp":30},10000,"success",{"full_name":7,"position":8,"description":9,"language":10,"stars":11,"forks":12,"stars_gained":13,"age_days":14,"hn_threads":15,"one_liner":21,"summary_md":22,"topic":23,"github_topics":26,"license":27,"homepage":9,"updated_at":28,"history":29},"openai\u002Fphp2shell-checker",1,null,"JavaScript",1381,126,344,4,[16],{"id":17,"title":18,"points":19,"comments":8,"posted_at":20},50184078,"Php2shell-Checker",2,"2026-10-21","根据站点暴露的 PHP 版本头或本地安装，判断是否落在已知漏洞影响范围内。","## 解决什么问题\n\nPHP 安全公告（比如 10 月 21 日这次）一发布，运维和审计人员最想先确认的就是：这台机器是不是已经打了补丁的版本。常规做法是登录服务器看 `php -v`，再对照公告里的版本区间人工判断；从外部检查时，只能看 `X-Powered-By` 头猜一猜。这个工具把这件事压缩成一条命令和一个可脚本判断的退出码，URL 和本地服务器两种场景都覆盖。\n\n## 有什么不同\n\n同类需求通常交给 Nikto、Nuclei 这类通用扫描器，或者自己写脚本匹配版本号。它们是通用且偏重的方案，而这个项目刻意做窄：只给版本判定。真正有区分度的有三点：结果只有 `OK`、`POTENTIALLY VULNERABLE`、`UNKNOWN` 三种状态，并且各自对应不同退出码，方便 CI 分支处理；上游修复版本写死在表里，PHP 5.4–8.1 这些分支不管补丁号多高都直接告警；以及它对自身局限非常坦白——不跟随重定向、不读响应正文、不发漏洞探测包，并且明确说明 `OK` 只描述“对外声明的版本”，不代表安装本身安全。另外它以两个 Codex skill（`phpcheck-server`、`phpcheck-url`）的形式分发，这是比较少见的打包方式。\n\n## 适合谁\n\n适合需要快速批量初筛大量主机的运维和安全工程师，也适合想在 CI 里加一道低成本卡点、发现站点声明了未修复 PHP 就失败的人。前提是你清楚基于响应头的判断只是线索，不是结论。不适合需要真正漏洞扫描、认证后检测或能识别发行版 backport 的团队——HTTP 头本身看不出这些，README 也直说了。只关心 PHP 之外的范围，应该去找成熟扫描器。\n\n## 上手成本\n\n直接运行需要 Node.js，或者一套 Codex 环境来装这两个 skill；README 只写了通过 skill installer 安装，独立运行路径是 `node phpcheck.js \"https:\u002F\u002Fexample.com\"`。规则表写死为这一份公告的修复版本（8.2.35、8.3.36、8.4.27、8.5.12），新公告出来后会过时，需要手动维护。协议是 Apache-2.0。OpenAI 声明不接受外部代码贡献，所以别指望自己提 PR 合进去，只能报 issue。成熟度基本为零：项目才三天。\n\n## 点评\n\n这是一个 2026-10-21 才创建、刚被追踪三天的新项目，新项目榜上日均约 +366 star，属于安全公告带起来的热度，不是已经沉淀下来的项目。README 对“别过度自信”讲得很清楚，这对一个只看响应头的检查来说是正确姿态；但写死的公告版本表意味着它是某个时间点的快照，而不是持续维护的扫描器。现在可以拿它做快速初筛或 CI 冒烟检查，任何重要的结论都要回到服务器上核实。不要把 `OK` 当成安全证明。",{"slug":24,"name":25},"security","安全",[],"Apache-2.0","2026-10-24T22:35:11Z",[],1792898425]