xss中的函数

📅 2026/8/1 20:03:20
xss中的函数
echo输出一个或多个字符串// 1. 输出单个echo Hello PHP;// 2. 输出多个echo Hello, , World; // 输出 Hello World// 3. 输出变量$name Alice;echo My name is $name;var_dump打印变量的详细信息类型与值$arr [name zhangsan, age 18];$bool false;var_dump($arr, $bool);include/require包含并运行指定文件// 标准用法include header.php;require config/database.php;// 带 once保证只引入一次防止函数重定义include_once lib/helper.php;require_once core/init.php;phpinfo输出关于 PHP 配置的详细信息// 输出全部信息最常用phpinfo();// 只输出模块信息更快phpinfo(模块);eval()将字符串当作PHP代码执行$code echo Hello World!;;eval($code); // 输出Hello World!// 危险场景用户传入$user_input $_GET[cmd]; // 假设用户传入: phpinfo();eval($user_input); // 直接执行 phpinfo()服务器沦陷assert()可执行任意代码// 正常用法检查布尔值assert(1 0); // 无输出通过// 高危用法字符串当作代码执行$code var_dump(123);;assert($code); // 输出: int(123)// 危险场景用户控制断言内容$_GET[flag] system(whoami);assert($_GET[flag]); // 执行系统命令preg_replace()使用/e修饰符时第二个参数会被当作代码执行// 高危写法PHP 5.6及以下有效$pattern /^(.*)$/e;$replacement strtoupper(\\1); // 这里的代码会被执行$subject hello;echo preg_replace($pattern, $replacement, $subject); // 输出: HELLO// 漏洞利用用户控制 pattern 或 replacement 即可注入代码create_function()创建匿名函数参数可被注入代码// 创建一个加法函数$func create_function($a,$b, return $a $b;);echo $func(5, 3); // 输出: 8// 漏洞利用注入代码$inject }system(id);//;$func2 create_function($a, echo $a; . $inject);// 实际生成的函数体为: function($a){ echo $a; }system(id);// }$func2(test); // 执行了 system(id)scandir()列出指定目录的文件和目录// 读取当前目录$files scandir(.);print_r($files);/* 输出示例:Array ([0] .[1] ..[2] index.php[3] config.ini) */// 读取指定路径危险场景$path $_GET[dir]; // 用户输入: ../../etc/$list scandir($path);array_filter()用回调函数过滤数组元素// 例1过滤出大于 0 的数保留原键名$arr [-1, 0, 1, 2];$filtered array_filter($arr, function($v) {return $v 0;});print_r($filtered); // [2 1, 3 2] 注意索引保留了 2 和 3// 例2不传回调去掉空值$data [a, , null, 0, b];$clean array_filter($data);print_r($clean); // [0 a, 4 b]array_map()为数组的每个元素应用回调函数// 例1将每个数字平方$nums [1, 2, 3];$result array_map(function($v) {return $v * $v;}, $nums);print_r($result); // [1, 4, 9]// 例2同时处理两个数组回调接收两个参数$arr1 [1, 2];$arr2 [10, 20];$sums array_map(function($a, $b) {return $a $b;}, $arr1, $arr2);print_r($sums); // [11, 22]array_key_exists()检查数组中是否存在某个键名$arr [name John, age null];var_dump(array_key_exists(name, $arr)); // bool(true)var_dump(array_key_exists(age, $arr)); // bool(true) 即使值是 null键依然存在var_dump(array_key_exists(gender, $arr)); // bool(false)function_exists()检查函数是否已定义bool function_exists(string $function_name)call_user_func以回调函数的形式去调用另一个你定义的函数// 1. 调用普通函数function add($a, $b) {return $a $b;}echo call_user_func(add, 5, 3);// 2. 调用类的方法class Math {public static function square($n) {return $n * $n;}public function cube($n) {return $n * $n * $n;}}// 静态方法两种写法echo call_user_func([Math, square], 3);echo call_user_func(Math::square, 3);// 非静态方法传对象实例$obj new Math();echo call_user_func([$obj, cube], 3);// 3. 调用匿名函数echo call_user_func(function($x) { return $x * 2; }, 10);