php危险函数总结

一、os命令执行函数

1.system()

将输入的字符串作为os命令执行,并且输出

<?php
if(isset($_GET['cmd'])){
echo "<pre>"; 
system($_GET['cmd']);
}else{
echo "Useage:http://IpAddress/?cmd=net user";
}
?>

 

2.exec()

将输入的字符串作为os命令执行,并且输出,但只输出最后一行

<?php
if(isset($_GET['cmd'])){
echo "<pre>";
print exec($_GET['cmd']);
}else{
echo "Useage:http://IpAddress/?cmd=whoami";
}
?>

 

3.shell_exec()

将函数中的参数当做os命令执行,完整显示

<?php
if(isset($_GET['cmd'])){
echo "<pre>";
print shell_exec($_GET['cmd']);
}else{
echo "Useage:http://IpAddress/?cmd=ipconfig";
}
?>

 

4.passthru()

自带输出功能

<?php
if(isset($_GET['cmd'])){
echo "<pre>";
passthru($_GET['cmd']);
}else{
echo "Useage:http://IpAddress/?cmd=ipconfig";
}
?>

 

5.popen()

此函数没有回显,因此需要将数据导入到一个文件中

<?php
if(isset($_GET['cmd'])){
echo "<pre>";
popen($_GET['cmd'],'r');
}else{
echo "Useage:http://IpAddress/?cmd=ipconfig > 1.txt";
}
?>

 

6.反引号``

将反引号中的参数当做os命令执行

<?php
if(isset($_GET['cmd'])){
$info = $_GET['cmd'];
print `$info`;
}else{
echo "Useage:http://IpAddress/?cmd=ipconfig";
}
?>

 

二、php代码执行函数

1.eval()

将字符串当作php代码执行

注意:输入的字符串需要以分号结尾

<?php
$str = "phpinfo();";
echo $str;
eval($str);
?>

 

2.assert()

将字符串当作php代码执行

<?php
if(isset($_GET['code'])){
$code=$_GET['code'];
assert($code);
}else{
echo "please submit code!<br>?code=phpinfo()";
}
?>

 

3.preg_replace()

利用正则表达式提取出指定字符串,字符串会被当成代码执行

<?php
if(isset($_GET['code'])){
$code = $_GET['code'];
preg_replace("/\[(.*)\]/e","\\1", $code);
}else{
echo "?code=[phpinfo()]";
}
?>

 

4.call_user_func()

funName是函数名称

stra是函数中的参数

<?php
if(isset($_GET['funName'])){
$fun = $_GET['funName'];
$para = $_GET['stra'];
call_user_func($fun,$para);
}else{
echo"?funName=assert&stra=phpinfo()";
}
?>

 

5.动态函数$a($b)

类似于call_user_func()

<?php
if(isset($_GET['a'])){
$a = $_GET['a'];
$b = $_GET['b'];
$a($b);
}else{
echo "?a=assert&b=phpinfo()";
}
?>

 防御方法:

  • 尽量不要使用eval等危险函数
  • 如果不得已使用,一定要进行严格过滤
  • 减少危险函数的使用,并在php.ini中修改disable_functions添加禁用的函数
  • 参数的值尽量使用引号包裹,并在拼接前调用 addslashes() 进行转义

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值