【发布时间】:2018-10-22 07:33:37
【问题描述】:
我有一个小的 PHP 文件,它从网页获取输入并将这些变量传递给 bash 脚本,该脚本在服务器上运行。 从 HTML 到 PHP 的输入工作正常,bash 脚本在单独运行时也是如此。如果我将 bash 脚本更改为写入文件而不是它也可以工作,那么它将变量放入似乎失败的命令中。
PHP
<html>
<title> New VPN password</title>
<h1> Your New VPN login details are</h1>
</html>
<?php
$USERNAME = $_POST['USERNAME'];
$PASSWORD = $_POST['PASSWORD'];
$NEWPASS = $_POST['NEWPASS'];
if(empty($USERNAME ) || empty($PASSWORD )) {
echo "<h2>You must fill in all fields</h2>\n" ;
die ("Click Back to start again.");
}
echo "<b>User Name:</b><br><br>";
echo $USERNAME;
echo "<br><br><b>New Password:</b><br><br>";
echo $NEWPASS;
$addr = shell_exec("sudo /var/www/html/chngpass.sh $USERNAME $PASSWORD $NEWPASS 2>&1");
?>
<html>
<br>
<br>
<br>
<script>
function goBack() {
window.history.back()
}
</script>
<body>
<button onclick="goBack()">Go Back</button>
</body>
</html>
而 Bash 脚本是
PASSWORD=$1
NEWPASS=$2
USERNAME=$3
echo -e "$NEWPASS\n$NEWPASS" | passwd $USERNAME
if [ $? -eq 0 ]; then
echo "SUCCESS"
fi
【问题讨论】:
-
每当您的脚本被修复时,任何有权访问此表单的人都可以更改 root 密码,这似乎是错误的。
-
在 sh 文件的开头添加 Bash shebang 会有帮助吗?我认为要么你这样做,要么使用 sh 运行命令。
-
@Lou Won;他们还需要输入 root 密码吗?
-
点了,但这只是在测试环境中,只有管理员可以访问。