我試圖運行一個使用php exec的shell腳本。通過網站安全地執行shell腳本
的事情是 - 這是不是很安全,因爲我通過一個HTML文本框發佈到它即
<?php
$output = shell_exec ('whois '.$_POST['domain']);
echo "<pre>$output</pre>";
?>
的事情是......如果用戶輸入| rm -rf *
會刪除文件夾中的所有內容。
是否存在執行shell腳本並防止發生這種情況的安全方法?
謝謝
我試圖運行一個使用php exec的shell腳本。通過網站安全地執行shell腳本
的事情是 - 這是不是很安全,因爲我通過一個HTML文本框發佈到它即
<?php
$output = shell_exec ('whois '.$_POST['domain']);
echo "<pre>$output</pre>";
?>
的事情是......如果用戶輸入| rm -rf *
會刪除文件夾中的所有內容。
是否存在執行shell腳本並防止發生這種情況的安全方法?
謝謝
總是有一個函數可以將用戶數據傳遞給另一個系統。在shell命令的情況下,有escapeshellarg。無論您對用戶輸入進行了哪些其他類型的驗證,在將它們傳遞給shell函數之前,轉義參數總是一個好主意。
例如:
$domain_arg = escapeshellarg($_POST['domain']);
$output = shell_exec('whois ' . $domain_arg);
你想做一個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";
}
我認爲你必須從用戶獲取用戶輸入並解析它,如果它是可以接受的,然後運行它在其他提示用戶該命令,你不能在這裏運行。 – 2013-04-26 11:57:12
您需要在發送數據到shell之前驗證發佈的數據 - 我認爲這是公共服務器上的痛苦處方 - 您能否強制他們從選項列表中進行選擇? – 2013-04-26 11:57:41