Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 执行sh脚本并发送信息_Shell_Php - Fatal编程技术网

Shell 执行sh脚本并发送信息

Shell 执行sh脚本并发送信息,shell,php,Shell,Php,我想通过PHP执行一个.sh脚本,并希望以用户名和密码的形式从表单发送信息 shell脚本使用/name.sh执行,然后请求用户输入,如下所示: Enter your Username: xxxxxxxxx //<-- The Input you normally type in the terminal 输入您的用户名:xxxxxxxxx//重要免责声明 写下答案后才意识到:请求用户输入并将其包含在shell脚本中而不进行预处理是非常危险的,因为恶意用户可能会注入代码。在下面的示例中,

我想通过PHP执行一个.sh脚本,并希望以用户名和密码的形式从表单发送信息

shell脚本使用
/name.sh
执行,然后请求用户输入,如下所示:

Enter your Username: xxxxxxxxx //<-- The Input you normally type in the terminal
输入您的用户名:xxxxxxxxx//重要免责声明
写下答案后才意识到:请求用户输入并将其包含在shell脚本中而不进行预处理是非常危险的,因为恶意用户可能会注入代码。在下面的示例中,如果用户键入
whateverusername
password;rm-rf--no protect root/;echo“
,PHP执行的最终命令将是
echo-e“whateverusername\n密码”;rm-rf——无保护根/;echo”“|/myscript
,这会使服务器崩溃

因此,在将输入传递到
POST
请求之前,必须对输入进行预处理,以确保其有效

这意味着在客户端和服务器端验证输入(以防用户绕过客户端验证)。比如:

#!/bin/bash

echo "Type username: "
read username
echo "Type password: "
read password
客户端POST请求->客户端验证(即JS)->服务器端预处理脚本->最后使用经过消毒的字符串发布到PHP页面


假设脚本需要两个变量,$username和$password,它们应该由
read
读取。比如:

#!/bin/bash

echo "Type username: "
read username
echo "Type password: "
read password
read
将从stdin中获取字符串,并在到达换行符时停止读取。然后,您可以将想要的变量重定向到脚本stdin,并用换行符将它们分隔开来,就像您刚刚键入它们一样

例如,假设您在PHP上使用
shell\u exec
运行shell脚本:

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

如果输入(例如用户名)在5秒后(因为脚本很忙或很长)是预期的,那么这是否更合适?还有一个问题:这也可以为咖啡脚本完成吗?如果脚本很忙,这无关紧要,因为一旦它不再忙,stdin将可用于它。关于咖啡脚本,我相信它也会起作用,尽管我从来没有用过。。顺便说一下,请阅读我刚刚添加到答案中的免责声明!在实施之前,你必须考虑一些严肃的问题。我知道我读过它:谢谢:所以PHP旁边还有别的方法吗?还是将值从表单传递到coffeescript/shell脚本的唯一方法?据我所知,您可以使用任何CGI脚本来实现这一点。该语言必须支持访问环境变量和使用stdin/stdout。如果您正确地配置了web服务器,那么它可以用Perl、Python、Ruby、C或您选择的任何语言编写。您可能仍然需要使用您选择的任何语言处理输入预处理。不过,有些将通过更多的ellaborate字符串操作功能使其更容易预处理。