PHP 危险函数

eval语句

<?php
$code=$_REQUEST['code'];
eval($code);
?>

 eval — 把字符串作为PHP代码执行

在上图中 eval把code当成代码执行

参数 

code

需要被执行的字符串

代码不能包含打开/关闭 PHP tags。比如, 'echo "Hi!";' 不能这样传入: '<?php echo "Hi!"; ?>'。但仍然可以用合适的 PHP tag 来离开、重新进入 PHP 模式。比如 'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";'

除此之外,传入的必须是有效的 PHP 代码。所有的语句必须以分号结尾。比如 'echo "Hi!"' 会导致一个 parse error,而 'echo "Hi!";' 则会正常运行。

return 语句会立即中止当前字符串的执行。

代码执行的作用域是调用 eval() 处的作用域。因此,eval() 里任何的变量定义、修改,都会在函数结束后被保留。

preg_replace 函数

preg_replace — 执行一个正则表达式的搜索和替换

// preg_replace.php

$code = preg_replace('~y~', 'Y', 'dys'); //把dys字符里的 ~y~ 换成Y
      
$code = preg_replace('~\[(.*)\]~e', '\\1', '[phpinfo()]');      

echo $code;

call_user_func

function add($a, $b) {
    return $a + $b;
}

$result = call_user_func('add', 1, 2);
echo $result; // 输出:3

第一个参数 add是被调用的回调函数,其余参数是回调函数的参数。

array_map

array_map — 为数组的每个元素应用回调函数

<?php
function addTwo($n) {
    return $n + 2;
}

$arr1 = array(1, 2, 3, 4, 5);
$arr2 = array_map('addTwo', $arr1);

print_r($arr2); // 输出: Array ( [0] => 3 [1] => 4 [2] => 5 [3] => 6 [4] => 7 )
?>

system 函数

system — 执行外部程序,并且显示输出

编写完毕后,在终端输入?cmd=ipconfig  查看ip信息

<?php
$cmd = $_REQUEST['cmd'];

system($cmd);
?>

 exec函数

$cmd = $_REQUEST['cmd'];

echo exec($cmd);

 exec() 执行 command 参数所指定的命令。

他会输出命令执行结果的最后一行内容。

 shell_exec 函数

shell_exec — 通过 shell 执行命令并将完整的输出以字符串的方式返回

$cmd = $_REQUEST['cmd'];

echo shell_exec($cmd);

passthru 函数

passthru — 执行外部程序并且显示原始输出

同 exec() 函数类似, passthru() 函数 也是用来执行外部命令(command)的。 当所执行的 Unix 命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数来替代 exec() 或 system() 函数。 常用来执行诸如 pbmplus 之类的可以直接输出图像流的命令。 通过设置 Content-type 为 image/gif, 然后调用 pbmplus 程序输出 gif 文件, 就可以从 PHP 脚本中直接输出图像到浏览器。

他输出全部的信息

$cmd = $_REQUEST['cmd'];

passthru($cmd);

在url上输入?cmd=ipconfig  即可查看ip信息

popen — 打开进程文件指针

'r' 表示阅读,'w' 表示写入。

在 Windows 上,popen() 默认是文本模式,即任何从管道中读取/写入的 \n 字符都将转换为 \r\n。如果避免这种情况,可以通过将 mode 设置为 'rb''wb' 来强制执行二进制模式。

$cmd = $_REQUEST['cmd'];

$result = popen($cmd, 'r');

echo fread($result, 1024);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值