Я хочу проверить, находится ли путь к файлу в текущем дереве каталогов.
Предположим, что параметр задан как js/script.js
. Мой рабочий каталог (WD) – это /home/user1/public_html/site
Теперь для текущего WD, если кто-то поставляет js/script.js
я могу просто проверить его, добавив к WD. Он работает для такого нормального пути. Но если кто-то (может быть атакующим) хочет пройти ../../../../etc/password
это будет проблемой.
Я знаю, что его можно подавить, удалив символы ..
используя некоторый RegEx. И это решит это наверняка. Но я хочу знать, как я могу создать какой-то chroot
ed environment sot, который передается любому пути / в / скрипт, который будет искать в WD?
Изменить: мне известно о http://php.net/chroot . это требует, чтобы ваше приложение запускалось с привилегиями root.
http://php.net/manual/en/function.realpath.php
$chroot = '/var/www/site/userdata/'; $basefolder = '/var/www/site/userdata/mine/'; $param = '../../../../etc/password'; $fullpath = realpath($basefolder . $param); if (strpos($fullpath, $chroot) !== 0) { // GOTCHA }