用PHP执行外部应用程序

用PHP执行外部应用程序,php,Php,我有一个linux命令行,需要用PHP或Javascript(首选PHP)执行 该命令是keygen AB3554C1D1971DB7\pc\u code 365 但是,我想用$pccode这样的字符串替换\pc\u code,用户在其中输入生成的pc代码。这是一个合法的项目,但在程序创建者给我帮助时遇到问题。看一下看一下你可以使用: 无论何时执行外部命令,都必须非常小心,以避免命令注入。您可以使用以下方法防止这种情况。您可以使用: 无论何时执行外部命令,都必须非常小心,以避免命令注入。您可以使

我有一个linux命令行,需要用PHP或Javascript(首选PHP)执行

该命令是
keygen AB3554C1D1971DB7\pc\u code 365

但是,我想用$pccode这样的字符串替换
\pc\u code
,用户在其中输入生成的pc代码。这是一个合法的项目,但在程序创建者给我帮助时遇到问题。

看一下

看一下

你可以使用:

无论何时执行外部命令,都必须非常小心,以避免命令注入。您可以使用以下方法防止这种情况。

您可以使用:


无论何时执行外部命令,都必须非常小心,以避免命令注入。您可以使用来防止这种情况。

这可能是因为该程序编写得不好,并将其信息输出到stderr而不是stdout。或者它可能是失败的,并且(正确地)将错误消息打印到stderr。无论哪种情况,shell_exec都不会捕获stderr。但是,您应该能够通过在命令末尾添加“
2>&1
”来捕获stderr,即:

$result = shell_exec('keygen AB3554C1D1971DB7 \pc_code 365 2>&1');
echo '<pre>'.htmlspecialchars($result).'</pre>';
$result=shell_exec('keygen AB3554C1D1971DB7\pc_code 365 2>&1');
回显“”。htmlspecialchars($result)。“”;
编辑:为了保持连续性,修复此问题的是下面另一个答案的评论中提到的内容:


也许它不喜欢赤裸裸的反斜杠?您可以尝试“
\\pc\u code


这可能是因为这个程序编写得很糟糕,将其信息输出到stderr而不是stdout。或者它可能是失败的,并且(正确地)将错误消息打印到stderr。无论哪种情况,shell_exec都不会捕获stderr。但是,您应该能够通过在命令末尾添加“
2>&1
”来捕获stderr,即:

$result = shell_exec('keygen AB3554C1D1971DB7 \pc_code 365 2>&1');
echo '<pre>'.htmlspecialchars($result).'</pre>';
$result=shell_exec('keygen AB3554C1D1971DB7\pc_code 365 2>&1');
回显“”。htmlspecialchars($result)。“”;
编辑:为了保持连续性,修复此问题的是下面另一个答案的评论中提到的内容:


也许它不喜欢赤裸裸的反斜杠?您可以尝试“
\\pc\u code


从JavaScript执行Linux命令实际上是不可能的(也不应该)。假设您指的是在客户机的web浏览器上运行的JavaScript,那么就不会有任何安全模型可以保护人们免受恶意命令行访问。PHP是另一回事。

从JavaScript执行Linux命令是不可能的(也不应该)。假设您指的是在客户机的web浏览器上运行的JavaScript,那么就不会有任何安全模型可以保护人们免受恶意命令行访问。PHP是另一回事。

如果$pccode相对简单,比如只有一串数字,那么最好检查其中是否真的只有数字。不知道keygen在幕后用字符串做什么。另外,检查一个特定的最大长度。好的,我试过了,但是没有用。但是,下面是脚本:$cmd=sprintf(“keygen AB3554C1D1971DB7\pc_code 365”)$结果=shell_exec($cmd);?>激活代码:请告诉我我做错了什么。您是否使用了%sescapeshellarg()代替了\pc\u Code?否,我用\pc\u代码替换了%s并完全删除了escapeshellarg()。当我这么做的时候,它什么也没有回报!请帮帮我,也许它不喜欢这个简单的反斜杠?您可以尝试“
\\pc\u code
”,如果$pccode相对简单,比如只有一串数字,那么最好检查其中是否真的只有数字。不知道keygen在幕后用字符串做什么。另外,检查一个特定的最大长度。好的,我试过了,但是没有用。但是,下面是脚本:$cmd=sprintf(“keygen AB3554C1D1971DB7\pc_code 365”)$结果=shell_exec($cmd);?>激活代码:请告诉我我做错了什么。您是否使用了%sescapeshellarg()代替了\pc\u Code?否,我用\pc\u代码替换了%s并完全删除了escapeshellarg()。当我这么做的时候,它什么也没有回报!请帮帮我,也许它不喜欢这个简单的反斜杠?你可以试试“
\\pc\u code
”好的……试过了……还是不起作用。这是错误sh:keygen:command未找到帮助!?!?好的……代码的编写方式应该是。/keygen……但现在它说权限被拒绝。我怎样才能改变这个?我使用GoDaddy.comKIP:它工作了,我添加了额外的\to\pc\u代码,它工作了…至少它生成了一个代码…无论如何…谢谢你的帮助。除非你能为我提供一个快速脚本,在Submit上重新加载添加了表单生成信息的页面。?只是一个想法。好吧……试过了……还是不起作用。这是错误sh:keygen:command未找到帮助!?!?好的……代码的编写方式应该是。/keygen……但现在它说权限被拒绝。我怎样才能改变这个?我使用GoDaddy.comKIP:它工作了,我添加了额外的\to\pc\u代码,它工作了…至少它生成了一个代码…无论如何…谢谢你的帮助。除非你能为我提供一个快速脚本,在Submit上重新加载添加了表单生成信息的页面。?只是一个想法。