Я работаю над онлайн-платформой, которая позволяет писать PHP-код в текстовом поле и видеть этот код в iframe.
Зачем? потому что я хочу выпустить API для другой платформы, чтобы пользователи могли попробовать их без проблем
С помощью этой платформы пользователи могут создавать/редактировать/удалять файлы. У каждого пользователя есть личная папка, содержащая его собственные файлы, имя папки равно имени пользователя. Моя проблема в том, что я не хочу, чтобы пользователь редактировал файлы других пользователей, но только свои. Как я могу это сделать? Если пользователь записывает код, относящийся к папке другого пользователя,
//for example
f_open('../path_to_differt_dir');
этот пользователь может удалить все файлы, принадлежащие другому пользователю. Как я могу избежать этого? Я хочу, чтобы ТОЛЬКО функции, написанные мной, могут изменять файл, но функции, созданные пользователем, однако, не имеют разрешения на изменение любого файла. Таким образом, я мог бы контролировать все это, но я не знаю, как это сделать.
Если я вас понимаю, вы строите "онлайн" компилятор PHP. У вас больше проблем, чем только относительный путь.
Лучший способ подойти к этому - использовать класс песочницы PHP, который позволит вам избежать небезопасного кода.
Вот хороший проект (лучшее, что я знаю): полномасштабный PHP 5.3. 2+ класс песочницы, который использует PHP-Parser для предотвращения использования изолированного кода от небезопасного кода.
Когда вы делаете это так, вы можете whitelist
функции, которые хотите, и черный список других - таким образом вы можете оставить exec, shell_exec...
Для относительных проблем пути вы всегда можете создать виртуальный хост для папки пользователя, когда создается папка, и установите его с помощью:
<VirtualHost 178.154.120.143:80>
<Directory /httpdocs/user/userfolder>
php_admin_value open_basedir "C:/httpdocs/user/userfolder"
</Directory>
</VirtualHost>
Проблема здесь в том, что вам нужно будет очистить изменения, которые обычно требуют перезапуска сервера. Но есть и решения для этого:
настроить виртуальный хост без перезапуска веб-сервера apache
Я надеюсь, что это помогает.
www.example.com/Script47/file.php
), проверьте, соответствует ли текущий$_SESSION['username']
имени пользователя в URL-адресе. Это означает, что когда они "входят в систему", вам нужно установить сеанс для имени пользователя.