2017-12-18 2 views
0

root 사용자로 notify-send을 사용하여 알림을 보내야하는 PHP를 사용하여 CLI APP를 작성합니다.PHP exec | DBUS_SESSION_BUS_ADDRESS를 설정할 때 널 바이트 오류가 발생했습니다.

알림을 보내려고하기 전에 DBUS_SESSION_BUS_ADDRESS을 설정해야한다는 것을 알고 있습니다. 그렇지 않으면 작동하지 않습니다.

이제이 아래 코드 : 검출 NULL 바이트 :

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

오류를

시스템()을 예외. 내가 $DBUS_SESSION을 발견 내 광범위한 디버깅에서 라인 (186)

에 /filepath.php에서 가능한 공격은 문제를 일으키는. 그러나 하드 코드를 $DBUS_SESSION 값을 다음 명령을 문제없이 작동합니다!. 이 같은

:

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

은 무슨 일이야? 이 문제를 어떻게 해결할 수 있습니까?

답변

1

문제는 sprintf에 직접 변수를 전달한다는 것이지만 문제는 그것이 작동하지 않는다는 것입니다. 당신은 인수 유형을 지시, 다음과 같이 sprintf를 함수에 계속 인수로 순서대로 변수를 제공

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

이 불행하게도, 난 여전히 같은 오류가있는 NULL BYTE detected 오류

+0

를 해결해야한다. 나는 오류가 전달되는 문자열의 유형으로 인한 것 같아요. 'DBUS'에는이 문제를 일으키는 요소가 포함되어 있습니다. –

관련 문제