Press "Enter" to skip to content

Taint支持PHP8啦!

Taint是什么:

在我的几个开源项目中,有一个项目是唯一一个我主动因为实现困难,而“放弃维护”的,就是Taint。

简单来说,Taint是一个用来检测XSS/SQL/Shell注入漏洞的PHP扩展, 当你在PHP代码中尝试直接使用一个来自外部输入的“字符串”的时候,Taint会提示你:

Warning: mysql_query() [function.mysql-query]: First argument contains data that might be tainted in xxx.php on line x

它的实现原理也很简单,对于所有来自外部的字符串,比如来自_GET/_POST之类的,给加一个标记,然后Taint会劫持相关可能会“复制”这些字符串的PHP的Opcode Handler, 如果不对这些字符串做无害化处理,那就持续在复制间传递这个标记。

这个项目最初是2012年发布的第一版。

2026-08-17_1255_taint_article0.png

但是,到了PHP8以后,因为JIT的引入,和大量内部结构的改写,我觉得要迁移的成本实在是太大,太难,甚至觉得不太可能了。因为原来的标记我们是保存在GC_FLAGS里面,而到PHP8.0以后,已经没有任何一个bit是可用的了。再加上,这些bits是非常内部的,也就是说如果要维护这个扩展可用,我需要随时监控对这些bits的使用,发现破坏就需要调整。

另外,Taint劫持了大量的PHP的方法和Opcodes handler来维持Taint的信息的传递,基本上就是要实现同样的功能,然后保证字符串的Taint位不被丢弃,所以我就也需要监控这些方法和Opcodes handler的变化,如果有变化,我就需要在Taint对应的地方同步变化。

实在是太复杂了。。。。并且我当时还需要同时维护PHP本身,以及自己其他的几个项目,以及这个是比较无趣的纯体力活,所以就。。。

2026-08-17_1255_article1.png

申明放弃维护。

Taint的转机:

在Vibe Coding已然成为一种新型生产力的今天,我其实也一直没想过说要让AI来干这活,觉得过于复杂,需要了解PHP的很多内部定义和实现细节。前几天看到了阿里千问发布了Qwen-3.8,2.4T,核心强调了它的编程能力,于是我就想试试看看千问是否可以。

我本地用的是Obsidian+Claudian+CC Switch用qwen-3.8-max, 所有的一切都开始于我给它了一句话(当然,本地我有php-src的源代码,和Taint本身的代码,和我其他的开源项目源代码可以供他查看):

2026-08-17_1255_article2.png

我开始也没报太多希望,因为我自己都觉得比较难,中间也看到它:

2026-08-17_1255_article3.png

所以,我以为它应该会失败吧,过了很久以后,我看他在不断的翻看php-src的各种定义,应该是理解了Taint想要干啥后,已经有了实现方法路径, 验证各种假设,又过了很久后...

2026-08-17_1255_article4.png

啊哈? 你不是吹牛逼吧,哈哈,于是我就让它去做了,它吭哧吭哧吭哧吭哧干了好几个小时,默不做声,中间我去开了一个长会回来,它还在吭哧吭哧:

2026-08-17_1255_article5.png

又吭哧吭哧了很久,它做完了!

2026-08-17_1255_article6.png

经过我大概半小时的Review,我觉得,它大概率,看起来,应该是靠谱的, 嗯Qwen-3.8-Max编程能力,我觉得是可以的, 能满足我日常的项目维护需求。....

总结一下:

全程耗时接近5个小时,今天一共消耗了2亿Token(当然其中有点其他工作,但应该影响不大),花费406RMB,客观讲这个消耗量有点大,2000多行的项目来说,大量的Token应该消耗在了理解PHP庞大的代码库内的各种细节吧,后续类似的项目应该有很大提升空间。

2026-08-17_1255_article7.png

2026-08-17_1255_article8.png

完成了Taint的PHP8适配,后续我也只需要定期让AI帮我看一下PHP的Change Log,如果有更新,就同步调整Taint就好了。

我想说:

在当今的时代,想法可能会变得更重要,而具体的执行,AI真的是完全可以,并且,它越来越可以了。

很多时候我们对AI应用的局限,仅仅在于敢不敢让它去试. 反正Token也越来越便宜了,😂...

Taint的PHP8版本,已经上线我的Github Repo,欢迎大家围观千问的代码。。。。

https://github.com/laruence/taint

Note:本文由 Jarvis(作者的 AI 助理)从公众号「风雪之隅」自动同步至本博客。


微信公众号阅读公众号原文:《Taint支持PHP8啦!- 千问3.8 Coding挑战》

4 Comments

  1. 石樱灯笼
    石樱灯笼 August 20, 2026

    500块钱雇一个中等程序员干一天都无法完成的事情,400块钱AI搞定了。
    程序员终于可以集体失业了。

  2. 陶然
    陶然 August 12, 2026

    13年用过Taint,看到更新有点感慨,鸟哥保重

  3. 林涧
    林涧 August 9, 2026

    406块复活一个扩展,这性价比没谁了

  4. 周晓凯
    周晓凯 August 8, 2026

    活久见,Taint居然更新了

Comments are closed.