糯米文學吧

位置:首頁 > 計算機 > php語言

PHP漏洞:命令注入攻擊

php語言2.99W
PHP漏洞:命令注入攻擊
  計算機程序中都會有漏洞,那麼在PHP中該怎麼防止注入攻擊呢?下面是小編整理的解決辦法,希望對大家有用,更多消息請關注應屆畢業生網。  命令注入攻擊,PHP中可以使用下列5個函數來執行外部的應用程序或函數  system、exec、passthru、shell_exec、“(與shell_exec功能相同)  函數原型  stringsystem(stringcommand,int&return_var)  command要執行的命令  return_var存放執行命令的執行後的狀態值  stringexec(stringcommand,array&output,int&return_var)  command要執行的命令  output獲得執行命令輸出的每一行字符串  return_var存放執行命令後的狀態值  voidpassthru(stringcommand,int&return_var)  command要執行的命令  return_var存放執行命令後的狀態值  stringshell_exec(stringcommand)  command要執行的命令  漏洞實例  例1:  //  $dir=$_GET["dir"];  if(isset($dir))  {  echo"  ";  system("ls-al".$dir);  echo"  ";  }  ?>  我們提交|cat/etc/passwd  提交以後,命令變成了system("ls-al|cat/etc/passwd");  eval注入攻擊  eval函數將輸入的.字符串參數當作PHP程序代碼來執行  函數原型:  mixedeval(stringcode_str)//eval注入一般發生在攻擊者能控制輸入的字符串的時候  //  $var="var";  if(isset($_GET["arg"]))  {  $arg=$_GET["arg"];  eval("$var=$arg;");  echo"$var=".$var;  }  ?>  當我們提交();漏洞就產生了;  動態函數  php  funcA()  {  dosomething();  }  funcB()  {  dosomething();  }  if(isset($_GET["func"]))  {  $myfunc=$_GET["func"];  echo$myfunc();  }  ?>  程序員原意是想動態調用A和B函數,那我們提交漏洞產生  防範方法  1、儘量不要執行外部命令  2、使用自定義函數或函數庫來替代外部命令的功能  3、使用escapeshellarg函數來處理命令參數  4、使用safe_mode_exec_dir指定可執行文件的路徑  esacpeshellarg函數會將任何引起參數或命令結束的字符轉義,單引號“’”,替換成“’”,雙引號“"”,替換成“"”,分號“;”替換成“;”  用safe_mode_exec_dir指定可執行文件的路徑,可以把會使用的命令提前放入此路徑內  safe_mode=On  safe_mode_exec_dir=/usr/local/php/bin/