执行sh脚本并发送信息

时间:2017-01-10 16:05:15

标签: shell php

我想通过 PHP 执行 .sh 脚本,我想从表单中以用户名密码发送信息

shell脚本使用./name.sh执行,然后它要求用户输入如下内容:

Enter your Username: xxxxxxxxx //<-- The Input you normally type in the terminal

然后应该传递一个PHP POST变量。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

重要免责声明

在写完答案之后才意识到:要求用户输入并将其包含在shell脚本中而不进行预处理是非常危险的,因为恶意用户可能会注入代码。在下面的示例中,如果用户键入whateverusernamepassword" ; rm -rf --no-protect-root / ; echo ",那么PHP执行的最终命令将是echo -e "whateverusername\npassword" ; rm -rf --no-protect-root / ; echo "" | ./myscript,这会破坏您的服务器。

因此,在将输入传递给POST请求之前,您必须预先处理输入以确保输入有效!

这意味着验证客户端服务器端的输入(如果用户绕过客户端验证)。类似的东西:

客户端POST请求 - &gt;客户端验证(即JS) - &gt;服务器端预处理脚本 - &gt;使用已清理的字符串

对PHP页面进行最终POST

假设您的脚本需要两个变量,$ username和$ password,这些变量应由read读取。类似的东西:

#!/bin/bash

echo "Type username: "
read username
echo "Type password: "
read password

read将指向来自 stdin 的字符串,并在到达换行符时停止读取。然后,您可以将所需的变量重定向到脚本 stdin ,并使用换行符分隔它们,它就像您输入它们一样。

例如,假设您在PHP上使用shell_exec来运行shell脚本:

<?php
    $shelloutput = shell_exec('echo -e "' . $_POST["username"] . '\n' . $_POST["password"] . '" | ./myscript');
?>

这将执行命令echo -e "<username>\n<password>" | ./myscript,它应该将POST变量解析为read个调用(假设它看起来类似于上面的shell脚本示例)。

另一种选择是使用Here-Documents:

<?php
    $shelloutput = shell_exec('./myscript << _EOF_'."\n".$_POST["username"]."\n".$_POST["password"]."\n".'_EOF_');
?>