xss中的函数
2026/8/1 20:03:14 网站建设 项目流程

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);

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询