我需要在Web窗體上捕獲用戶輸入並將其傳遞給腳本以創建用戶帳戶,但我無法使其工作。到目前爲止,我有一個add_user.sh腳本讀取這樣的:從PHP調用bash腳本
adduser -u $NAME -p $PASS -g users -s /bin/bash
但林不知道這是怎麼回事捕獲用戶從Web表單中輸入的數據?
我需要在Web窗體上捕獲用戶輸入並將其傳遞給腳本以創建用戶帳戶,但我無法使其工作。到目前爲止,我有一個add_user.sh腳本讀取這樣的:從PHP調用bash腳本
adduser -u $NAME -p $PASS -g users -s /bin/bash
但林不知道這是怎麼回事捕獲用戶從Web表單中輸入的數據?
可以構建成一個字符串,然後用exec
如果您的服務器有它啓用
$str = 'adduser -u ' . $NAME . ' -p ' . $PASS . ' -g users -s /bin/bash';
exec(escapeshellcmd($str));
我應該有可能前面提到的,許多主機禁用該功能,執行命令行的任何功能命令,出於安全原因, 。僅僅因爲這存在並不是一個好主意。
有點危險,取決於安全設置和$ NAME和$ PASS的數據源。 http://php.net/manual/en/function.escapeshellcmd.php http://php.net/manual/en/function.escapeshellarg.php – Will
Marc B對OP的評論也適用。在調用命令之前,必須徹底清理「$ NAME」和「$ PASS」。 –
謝謝。我怎麼能通過PHP調用它? – user2938994
寫腳本add_user.sh
像這樣(介意引號):
#!/bin/sh
adduser -u "$1" -p "$2" -g users -s /bin/bash
使其可執行:
[email protected]$ chmod +x add_user.sh
並在php
從稱其爲:
<?php
$command="/path/to/add_user.sh ".escapeshellarg($name)." ".escapeshellarg($pass);
exec ($command,$output=array(),$return_value);
if($return_value!==0) {
# Oh dear! something bad happened
}
?>
(我沒有php inst這裏alled,所以我不能徹底地測試我的答案)
如果你不想用你的若干輔助腳本,就可以直接做:
<?php
$command="/path/to/adduser -u ".escapeshellarg($name)." -p ".escapeshellarg($pass)." -g users -s /bin/bash";
exec ($command,$output=array(),$return_value);
if($return_value!==0) {
# Oh dear! something bad happened
}
?>
請確保您測試返回值(就像我那樣)。您將在數組$output
中獲得命令的輸出。
對於每個參數使用escapeshellarg
比在已建好的完整命令上調用escapeshellcmd
安全得多。
你必須在你用來調用add_user.sh的php命令上傳遞這些參數。就像這樣:'passthru(「add_user.sh -u $ NAME -p $ PASS」);'。 – Jacobson
如果'$ NAME'來自Web窗體,那麼你已經使**絕對**確定你正在使用正確的方法將它傳遞給命令行應用程序。考慮如果用戶輸入'; rm -rf /'作爲他們的用戶名...例如http://php.net/escape_shell_arg –
當然,馬克B說的是完全正確的。 – Jacobson