2011-10-17 18 views
4

我有三個PHP腳本。一,我從init腳本開始。第二個由第一個自身啓動,第二個使用shell_exec通過定期向其傳遞各種參數來從第三個腳本獲取輸出。shell_exec返回NULL,但從控制檯嘗試時,它的工作原理

但它沒有發生。當我var_dump輸出shell_exec,在第二個腳本中,我得到NULL。但是,當我在第二個腳本中打印shell_exec中使用的實際命令並嘗試將其輸入到控制檯時,它工作得非常好!

我試着從同一個用戶的控制檯啓動init腳本的命令。

這可能是一個權限問題。但我有適當的權限設置即

  1. + X的第三個腳本
  2. 第三腳本(實際上所有的三都)是由相同的用戶和組我使用控制檯

注 - 我試着開始家當以及通過移除家當和腳本路徑前添加php第三腳本。有了根,一切運行良好。

而且,只是一個說明,第一個腳本,第二腳本的輸出重定向到一個日誌文件(這是我發現的第三個腳本上shell_exec返回NULL

UPDATE:從第二個腳本的代碼,它使用shell_exec

$command = "/var/data/user-data.php '{$user}' '{$request['token']}' '{$request['secret']}'"; 
$data = json_decode(shell_exec($command), true); 

我試圖打印$commandvar_dump(shell_exec($command))。前者返回,預計我們的(PARAMS),後者返回NULL

+0

發佈使用 – 2011-10-17 04:26:50

+0

@Dagon完成確切的代碼你。請檢查。 – kapeels

回答

-2

沒有直接評論的問題是什麼 -

停止。不要掏腰包。這是一個安全雷區。

$command = "/var/data/user-data.php '{$user}' '{$request['token']}' '{$request['secret']}'"; 

如果用戶通過會發生什麼事,說:

http://yoursite.com/index.php?token=';rm -rf/# 

答:你的整個服務器被刪除(或者至少任何PHP腳本用戶可以觸摸)。當然,還有其他更隱祕的事情可以做。而這種漏洞可以通過自動掃描儀,這將反過來自動根服務器中找到。

所以不要掏出,特別是當你只是調用另一個PHP腳本。把你的代碼放到一個函數中,包含包含它的php文件,並在需要數據時調用函數。

+0

這些文件不在web根目錄下,它實際上只是'$ request'而不是'$ _REQUEST' :)但是,我喜歡包含腳本的想法。 – kapeels

+0

@KPL,不管他們是否在web根目錄下,如果用戶可以控制任何這些變量,那麼你就搞砸了。即使你擁有安全權利(如果你甚至不願意爲此付出代價,這也是極不可能的),脫殼速度很慢,而且實際上比將這個該死的東西放入一個函數更有效。 – bdonlan

+1

這應該是一個評論,它絕對不值得作爲答案。我在這裏的問題和原因是找出爲什麼shell_exec返回null。你沒有回答。跆拳道是與互聯網,每個人都認爲有一個更好的做事方式。 stfu並回答被問到的人的問題。 –

相關問題