2017-12-18 7 views
0

Ich baue eine CLI-APP mit PHP, in dem ich Benachrichtigungen senden muss notify-send als root Benutzer.PHP exec | Null-Byte-Fehler beim Versuch, DBUS_SESSION_BUS_ADDRESS zu setzen

Jetzt weiß ich, ich muss DBUS_SESSION_BUS_ADDRESS setzen, bevor ich versuche, eine Benachrichtigung zu senden. sonst würde es nicht funktionieren.

Nun ist diese unterhalb Code:

$c = sprintf("DBUS_SESSION_BUS_ADDRESS=".$DBUS_SESSION." /usr/bin/notify-send \"TITLE\" \"MESSAGE\""); 
system($c); 

wirft einen Fehler

system(): NULL-Byte detektiert. Möglicher Angriff in /filepath.php auf Linie 186

aus meinem umfangreichen Debug-I $DBUS_SESSION gefunden habe, ist das Problem verursacht. Wenn ich jedoch den $DBUS_SESSION Wert fest codiere, funktioniert der Befehl ohne ein Problem !.

wie folgt aus:

$c = sprintf("DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus,guid=5ded8923178f8ea19642e36a5a37eb76 /usr/bin/notify-send \"sdfTITLE\" \"MESSAGE\""); 
system($c); 

Was ist hier los? Wie kann ich das lösen?

Antwort

1

Das Problem ist, dass Sie die Variable direkt an sprintf übergeben, aber so funktioniert es nicht. Sie bestimmen die Art Argument, geben Sie dann die Variable, um die fortgesetzte Argumente an die Funktion sprintf, wie folgt aus:

$c = sprintf("DBUS_SESSION_BUS_ADDRESS=%s /usr/bin/notify-send \"TITLE\" \"MESSAGE\"", $DBUS_SESSION); 
system($c); 

Dies sollte die NULL BYTE detected Fehler

+0

leider noch lösen Ich habe den gleichen Fehler. Ich denke, der Fehler ist aufgrund der Art der Zeichenfolge, die übergeben wird. Der 'DBUS' enthält etwas, das dieses Problem verursacht –

Verwandte Themen