2014-01-27 47 views
0

我想執行一個PHP文件exec來處理後臺進程,其中1234567是我希望從數據庫中調用以獲取一些信息的ID我要處理的是什麼。PHP調用執行php文件在後臺執行

exec('/var/www/somescript.php 1234567 > /dev/null &'); 

是否有任何潛在的安全問題或我遇到的問題?

對於傳入的參數,我應該使用escapeshellarg()嗎?

回答

0

我確定這取決於是否應該通過網絡用戶調用,以及如果用戶創建了參數或執行的命令。

在我看來,使用escapeshellarg()應該總是被調用,因爲您不會使用MYSQL_函數,也不會因爲SQL注入的風險而轉義任何輸入。使用exec函數是一個類似的問題,你不會在不轉義輸入的情況下使用腳本。但是,轉義輸入並不能阻止人們濫用腳本。

您確實需要確認已發送到腳本的任何參數的驗證,例如您不希望任何人註釋掉腳本並在參數部分注入完全不同的腳本以添加用戶(這不應該允許發生propper權限)。

我會用這個作爲最後的手段,如果問題不能以任何其他方式解決,而不是使用exec。

+0

我有多個客戶實時發送的地方,其中一個需要15 - 30秒,這是不是真的可以接受的時間。客戶發送的所有其他地方我們都需要能夠傳回每個信息,但這可以作爲後臺進程傳遞。 該ID將來自數據庫,用戶無法訪問此部分。我正在努力思考替代方案,pthread不是我想要在服務器上安裝的東西。 –

+0

抱歉不完全確定你的意思。所以後臺進程將被用來發回信息?如果您嘗試使用memcached/memcache緩存數據,那麼可以多次檢索到的信息是一個持續不斷的流? –

+0

我們爲每個客戶使用多種Web服務,我們只需要通過它發送數據與客戶的結果無關。 –