【问题标题】:passing variables from php to bash将变量从 php 传递到 bash
【发布时间】: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 密码吗?
  • 点了,但这只是在测试环境中,只有管理员可以访问。

标签: php html bash


【解决方案1】:

来自您的 PHP 脚本:

$addr = shell_exec("sudo /var/www/html/chngpass.sh $USERNAME $PASSWORD $NEWPASS 2>&1");

您按以下顺序传递参数“用户名”、“密码”、“新通行证”这是您的 bash 脚本:

PASSWORD=$1
NEWPASS=$2
USERNAME=$3

echo -e "$NEWPASS\n$NEWPASS" | passwd $USERNAME

if [ $? -eq 0 ]; then
        echo "SUCCESS"
fi
  • 参数 1 (USERNAME) 被分配给 PASSWORD。
  • 参数 2(密码)被分配给 NEWPASS。
  • 参数 3 (NEWPASS) 被分配给 USERNAME。

修复你的 bash 脚本:

USERNAME=$1
PASSWORD=$2
NEWPASS=$3        

echo -e "$NEWPASS\n$NEWPASS" | passwd $USERNAME

if [ $? -eq 0 ]; then
    echo "SUCCESS"
fi

【讨论】:

  • 是的。似乎是可变顺序。好收获@lou
  • 我自己发现了,感谢您的提醒。仍在努力将任何变量传递给 passwd?
  • 从 CLI 运行 bash 脚本是否有效?
  • @LeeEmmery 不要忘记在变量中必须对空格和 & 等字符进行转义。您尝试更改的用户名或密码中是否有任何这些?无论如何,最好在 PHP 中转义变量:php.net/manual/fr/function.escapeshellcmd.php
  • 不在任何变量中使用特殊字符。如果我将脚本设置为输出到 txt 文件,则脚本可以工作,然后它会捕获在 html 页面中输入的内容。但我不会将变量传递给 passwd 命令。但是如果我运行 (echo -e "$NEWPASS\n$NEWPASS" | passwd $test ) 它将更改用户测试的密码。
猜你喜欢
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
相关资源
最近更新 更多