PHP漏洞:命令注入攻擊
來源:文萃谷 2.95W
計算機程序中都會有漏洞,那麼在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/