eval
功能:接受一个字符串参数,并把这串字符串参数当作代码执行
eval不是一个函数,他是一个内置的功能,所以他不能分开写,像assert一样分开写。
assert
功能:assert(expression, description);
expression 是要测试的表达式。
description 是当表达式为 FALSE 时要显示的错误消息(可选)。
● 在PHP 7.2.0及之前的版本中,assert()是一个函数,它既可以接受一个布尔表达式作为参数,也可以接受一个字符串(当断言被启用且表达式为FALSE时,该字符串会被当作PHP代码执行)。这种将字符串当作代码执行的能力在某些情况下可能被用于恶意目的,因此在使用时需要特别小心。
● 从PHP 7.2.0开始,assert()的行为发生了变化,它不再默认执行字符串作为代码。取而代之的是,当断言失败时,它会抛出一个异常。此外,PHP 7.2.0还引入了assert.exception配置指令,允许开发者控制当断言失败时是抛出异常还是发出警告。
ps:可以分开写,eval不行
例如:
$a="ass";
$b="ert";
$c=$a.$b;
这种情况可能导致扫描器扫描不出来,所以咱们可以用来写免杀。
perg_replace+/e(PHP版本上5.5就不太行了)
功能:preg_replace ( $pattern , $replacement , $subject )
在第三个参数所代表的字符串中寻找第一个参数所代表的pattern是否存在,如果存在,讲第一个参数代表的值替换为第二个参数代表的值。
$text = "Hello, world! Welcome to the PHP world.";
$pattern = "/world/";
$replacement = "universe";
$newText = preg_replace($pattern, $replacement, $text);
echo $newText; // 输出:Hello, universe! Welcome to the PHP universe.
这个函数在5.5之后由于修饰符e被废弃,不能去执行命令了
create_function(7.2之后被弃用)
功能:根据传递的参数创建匿名函数,并为其返回唯一名称。
array_map()
array_map() 函数对数组中的每个元素应用回调函数,并返回包含回调函数返回值的新数组。这个函数非常适合于对数组中的每个元素执行相同的操作。
array_filter()
array_filter() 函数用回调函数过滤数组中的元素,返回一个新数组,包含所有通过测试(即回调函数返回 true)的数组元素。
call_user_func()/call_user_func_array()
这两个函数用于调用回调函数。虽然它们本身不直接执行代码,但如果回调函数来自不可信的源,并且没有进行适当的验证或过滤,就可能执行恶意代码。