标签:
php中可以使用如下5个函数来执行外部的应用程序或函数:
string system(string command,int &return_var) 注:command要执行的命令,return_var 存放执行命令的执行后的状态值; string exec(string command,array &output,int $return_var) 注:output 获得执行名输出的每一行字符串 void passthru(string command,int &return_var) string shell_exec(string command) ``:与shell_exec的功能相同
## 漏洞示例 ##
<?php error_reporting(0); $dir=$_GET[‘dir‘]; if(isset($dir)){ system("ls -al".$dir); } ?>
# eval注入攻击 #
## 漏洞示例 ##
<?php $var="var"; if(isset($_GET[‘arg‘])){ $arg=$_GET[‘arg‘]; eval("\$var=$arg;"); echo "\$var=".$var; } ?>
# 动态函数 #
## 漏洞示例 ##
<?php func A(){ dosomething(); } func B(){ dosomething(); } if(isset($_GET["func"])){ $myfunc=$_GET["func"]; echo $myfunc(); } ?>
# 防御方法 #
1、尽量不要执行外部命令 2、使用自定义函数或函数库来替代外部命令的功能 3、使用escapeshellarg函数来处理命令参数 4、使用safe_mode_exec_dir指定可执行文件的路径 esacpeshellarg函数会将任何引起参数或命令结束的字符转义,单引号“’”,替换成“\’”,双引号“””,替换成“\””,分号“;”替换成“\;” 用safe_mode_exec_dir指定可执行文件的路径,可以把会使用的命令提前放入此路径内 safe_mode = On safe_mode_exec_di r= /usr/local/php/bin/
标签:
原文地址:http://www.cnblogs.com/BloodZero/p/4438239.html