gpt4 book ai didi

php - 将十六进制数据从 PHP 传递到外部程序

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:42 24 4
gpt4 key购买 nike

这是我的问题:我希望从 PHP 传递一些十六进制数据到外部应用程序:

exec('echo "'.$message.'" | /usr/bin/gateway');

$message 来自用户输入:

test'"/'\'/"\""//

addslashes()、stripslashes() 并不能解决我的麻烦。使用时:

$message = stripslashes($_POST['message']);

这是我可以看到的控制台日志:

sh: 1: Syntax error: Unterminated quoted string

或空值

所以我开始思考,将输入转换为十六进制值并传递它们可能会有所帮助:

exec('echo -e '.$message.' | /usr/bin/gateway');

但是后来我在将十六进制数据传递给该回显时遇到了麻烦。

所以我的问题是如何做到这一点?我需要将用户写入的完全相同的字符串传递给网关服务。- 将用户输入转换为十六进制形式,并将其放入 echo -e (如何?)- 或者以某种方式与引号和斜杠进行斗争

最佳答案

一般情况下,由于 shell 的转义规则,您无法通过 shell 传递用户输入。您应该做的是获取新生成的进程的标准输入流的句柄并直接提供它。

您可以使用popen为此:

$handle = popen('/usr/bin/gateway', 'w');
fwrite($handle, $_POST['message']);
pclose($handle);

如果您需要做的事情超出示例所示,并且 popen 没有提供足够的功能,proc_open是一个更复杂、更强大的替代方案。

警告:将未经过滤的用户输入提供给外部进程会使您容易受到与进程如何解释和操作此输入相关的攻击。如果不可信用户可以访问您的应用程序,请强烈考虑将输入列入白名单!

关于php - 将十六进制数据从 PHP 传递到外部程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16078913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com