PHP Phar反序列化:filesize返回值异常问题咨询
Phar反序列化场景下
filesize("phar://test.phar")返回0的原因 核心逻辑差异
file_exists("phar://test.phar")仅做两层校验:一是本地test.phar文件是否存在,二是PHP是否启用Phar流包装器,这两个条件满足就会返回true,和Phar内部结构无关。filesize("phar://test.phar")尝试获取的是Phar归档的根目录大小,但Phar的根目录是虚拟的归档结构节点,并非实际存储的字节数据,因此函数默认返回0,这是Phar流包装器的固有处理逻辑。
反序列化触发与返回值的独立性
你通过Phar元数据触发反序列化执行uname -a的操作,和filesize()的返回结果是完全分离的两个流程:
- 反序列化触发是因为Phar流包装器在解析归档元数据时的必然行为,只要访问Phar归档的元数据区域就会触发,和
filesize()的计算逻辑无关。 filesize()返回0是它处理虚拟目录的默认结果,不代表反序列化执行失败,也和恶意代码是否运行成功没有关联。
正确获取大小的方式
如果要获取Phar文件本身的真实大小,直接访问本地路径即可:
filesize("test.phar"); // 返回Phar文件的实际字节数
如果要获取Phar内部文件的大小,需要指定具体的内部路径:
filesize("phar://test.phar/your_inner_file.php"); // 返回内部文件的实际大小
内容的提问来源于stack exchange,提问作者OrenIshShalom
相关产品推荐
相关产品推荐

