Можно ли избежать этого str_replace () для обхода пути? - PullRequest
0 голосов
/ 11 февраля 2019

Я тестирую одно из наших веб-приложений PHP на предмет проблем безопасности.
Система, на которой работает код, работает как минимум с PHP7.2.

Теперь я нашел что-то вроде следующего в коде (упрощенный для этого вопроса, но сводится к этому):

$file = $_GET['file'];

$path = "/some/directory/" . $file;

$path = str_replace(['../', '..'], '', $path);

echo file_get_contents($path);  

Можно ли изменить параметр файла таким образом, чтобымы можем избежать /some/directory, так что после str_replace() вызов file_get_contents() будет выглядеть примерно так: file_get_contents(/some/directory/../../etc/passwd)?

Редактировать:
Я не могу изменить порядок выполнения кода.Я могу определить значение $_GET['file'] только по моей просьбе.
Кроме того, я знаю, как сделать это более безопасным, но для своих исследований я собираюсь его разбить.

По сути, что-то нужно сделать, так или иначеобманом str_replace() оставив немного ../.

Я пытался в течение нескольких часов с различными подходами, но - к счастью для нашего приложения - не смог заставить его работать.
У вас есть какие-нибудь идеи?

Вы можете поиграть с кодом здесь: https://3v4l.org/3ehYA

...