魔术常量__CLASS__的一个误区

本文通过一个具体的PHP代码示例,展示了尝试实例化抽象类时可能遇到的问题,并深入解析了导致这一错误的原因。同时,文章还提醒开发者注意非抽象类中潜在的误用风险。

先看代码:

abstract class A
{

	public static function model($classname = __CLASS__)
	{
		return new $classname;
	}
}


class B extends A
{
	
}

B::model();

这里会报一个fatal error:Cannot instantiate abstract class A 

究其原因,是魔术常量__CLASS__值是该类名,且在运行前已经由编译器替换成了“A”,而A为抽象类所以报错

如果不是抽象类,后果会更严重,以为实例化的B,实际实例化的A,且难以发现

我在做一个web题目,叫做ez??upload 给了一个网站http://160.30.231.222:33367/ 源代码是<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <title>Upload</title> <style> body { font-family: Arial, sans-serif; background-color: #f2f2f2; } .container { max-width: 400px; margin: 0 auto; padding: 20px; background-color: #fff; border-radius: 5px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); } .form-group { margin-bottom: 20px; } .form-group label { display: block; font-weight: bold; margin-bottom: 5px; } .form-group input[type="file"] { padding: 10px; border: 1px solid #ccc; border-radius: 5px; background-color: #fff; } .form-group input[type="submit"] { padding: 10px 20px; background-color: #4CAF50; color: #fff; border: none; border-radius: 5px; cursor: pointer; } .form-group input[type="submit"]:hover { background-color: #45a049; } </style> </head> <body> <div class="container"> <h2>文件上传</h2> <form action="index.php" method="POST" enctype="multipart/form-data"> <div class="form-group"> <label for="file">选择文件</label> <input type="file" name="file" id="file" /> </div> <div class="form-group"> <input type="submit" value="上传" /> </div> </form> </div> </body> </html> <!-- class.php --> Hacker? 其中这个网站后面加/class.php会得到<?php error_reporting(0); highlight_file(__FILE__); class hacker{ public $cmd; public $a; public function __destruct(){ if('hahaha' === preg_replace('/;+/','hahaha',preg_replace('/[A-Za-z_\(\)]+/','',$this->cmd))){ eval($this->cmd.'hahaha!'); } else { echo 'nonono'; } } } if(isset($_POST['file'])) { if(preg_match('/^phar:\/\//i',$_POST['file'])) { die("nonono"); } file_get_contents($_POST['file']); } ?> 我是edge浏览器,我上传了一个可以绕过__HALT_COMPILER检测的并且伪造成jpg的文件,网页中出现了Saved to: /tmp/d0096ec6c83575373e3a21d129ff8fef.jpg,请你告诉我怎么做才能拿到flag,详细,每一个步骤都要详细
10-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值