2013-04-26 63 views
1

我試圖運行一個使用php exec的shell腳本。通過網站安全地執行shell腳本

的事情是 - 這是不是很安全,因爲我通過一個HTML文本框發佈到它即

<?php 
$output = shell_exec ('whois '.$_POST['domain']); 
echo "<pre>$output</pre>"; 
?> 

的事情是......如果用戶輸入| rm -rf *

會刪除文件夾中的所有內容。

是否存在執行shell腳本並防止發生這種情況的安全方法?

謝謝

+0

我認爲你必須從用戶獲取用戶輸入並解析它,如果它是可以接受的,然後運行它在其他提示用戶該命令,你不能在這裏運行。 – 2013-04-26 11:57:12

+0

您需要在發送數據到shell之前驗證發佈的數據 - 我認爲這是公共服務器上的痛苦處方 - 您能否強制他們從選項列表中進行選擇? – 2013-04-26 11:57:41

回答

1

總是有一個函數可以將用戶數據傳遞給另一個系統。在shell命令的情況下,有escapeshellarg。無論您對用戶輸入進行了哪些其他類型的驗證,在將它們傳遞給shell函數之前,轉義參數總是一個好主意。

例如:

$domain_arg = escapeshellarg($_POST['domain']); 
$output = shell_exec('whois ' . $domain_arg); 
0

你想做一個whois。所以你需要驗證它是否只包含你想要的部分。在你的情況下,一個域名,沒有別的。

if (preg_match('/^(?:[-A-Za-z0-9]+\.)+[A-Za-z]{2,6}$/', $_POST['domain'])) 
{ 
    $output = shell_exec('whois ' . $_POST['domain']); 
    echo "<pre>$output</pre>"; 
} 
else 
{ 
    echo "stop trying to make my server annoyed"; 
}