PHP 执行 |尝试设置 DBUS_SESSION_BUS_ADDRESS 时出现空字节错误
PHP exec | Null byte error when trying to set DBUS_SESSION_BUS_ADDRESS
我正在使用 PHP 构建一个 CLI 应用程序,我需要在其中使用 notify-send
作为 root
用户发送通知。
现在我知道在尝试发送通知之前我需要设置 DBUS_SESSION_BUS_ADDRESS
。否则它不会工作。
现在下面的代码:
$c = sprintf("DBUS_SESSION_BUS_ADDRESS=".$DBUS_SESSION." /usr/bin/notify-send \"TITLE\" \"MESSAGE\"");
system($c);
引发错误
system(): NULL byte detected. Possible attack in
/filepath.php on
line 186
从我广泛的调试中我发现 $DBUS_SESSION
是导致问题的原因。但是,如果我对 $DBUS_SESSION
值进行硬编码,则该命令可以正常工作!
像这样:
$c = sprintf("DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus,guid=5ded8923178f8ea19642e36a5a37eb76 /usr/bin/notify-send \"sdfTITLE\" \"MESSAGE\"");
system($c);
这是怎么回事?我该如何解决这个问题?
问题是您直接将变量传递给 sprintf,但这不是它的工作方式。您指定参数类型,然后按顺序提供变量作为 sprintf 函数的连续参数,如下所示:
$c = sprintf("DBUS_SESSION_BUS_ADDRESS=%s /usr/bin/notify-send \"TITLE\" \"MESSAGE\"", $DBUS_SESSION);
system($c);
这应该可以解决 NULL BYTE detected
错误
我正在使用 PHP 构建一个 CLI 应用程序,我需要在其中使用 notify-send
作为 root
用户发送通知。
现在我知道在尝试发送通知之前我需要设置 DBUS_SESSION_BUS_ADDRESS
。否则它不会工作。
现在下面的代码:
$c = sprintf("DBUS_SESSION_BUS_ADDRESS=".$DBUS_SESSION." /usr/bin/notify-send \"TITLE\" \"MESSAGE\"");
system($c);
引发错误
system(): NULL byte detected. Possible attack in /filepath.php on line 186
从我广泛的调试中我发现 $DBUS_SESSION
是导致问题的原因。但是,如果我对 $DBUS_SESSION
值进行硬编码,则该命令可以正常工作!
像这样:
$c = sprintf("DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus,guid=5ded8923178f8ea19642e36a5a37eb76 /usr/bin/notify-send \"sdfTITLE\" \"MESSAGE\"");
system($c);
这是怎么回事?我该如何解决这个问题?
问题是您直接将变量传递给 sprintf,但这不是它的工作方式。您指定参数类型,然后按顺序提供变量作为 sprintf 函数的连续参数,如下所示:
$c = sprintf("DBUS_SESSION_BUS_ADDRESS=%s /usr/bin/notify-send \"TITLE\" \"MESSAGE\"", $DBUS_SESSION);
system($c);
这应该可以解决 NULL BYTE detected
错误