Разрешение пользователя в PHP

1

Я работаю над онлайн-платформой, которая позволяет писать PHP-код в текстовом поле и видеть этот код в iframe.

Зачем? потому что я хочу выпустить API для другой платформы, чтобы пользователи могли попробовать их без проблем

С помощью этой платформы пользователи могут создавать/редактировать/удалять файлы. У каждого пользователя есть личная папка, содержащая его собственные файлы, имя папки равно имени пользователя. Моя проблема в том, что я не хочу, чтобы пользователь редактировал файлы других пользователей, но только свои. Как я могу это сделать? Если пользователь записывает код, относящийся к папке другого пользователя,

//for example 
f_open('../path_to_differt_dir');

этот пользователь может удалить все файлы, принадлежащие другому пользователю. Как я могу избежать этого? Я хочу, чтобы ТОЛЬКО функции, написанные мной, могут изменять файл, но функции, созданные пользователем, однако, не имеют разрешения на изменение любого файла. Таким образом, я мог бы контролировать все это, но я не знаю, как это сделать.

  • 0
    Когда пользователь запрашивает путь к файлу ( www.example.com/Script47/file.php ), проверьте, соответствует ли текущий $_SESSION['username'] имени пользователя в URL-адресе. Это означает, что когда они "входят в систему", вам нужно установить сеанс для имени пользователя.
  • 0
    Спасибо за ответ, но это не моя проблема. Если пользователь на своей странице пишет php-код, например, fopen ('../ path_to_other_user'); сессия пользователя это нормально, но он может читать / удалять или все, что он хочет в файл другого пользователя
Теги:
permissions
ssh

1 ответ

0
Лучший ответ

Если я вас понимаю, вы строите "онлайн" компилятор 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

Я надеюсь, что это помогает.

  • 0
    Большое спасибо , прямо сейчас у меня есть два варианта, один из которых вы предлагаете, другой выбор: PHPGACL

Ещё вопросы

Сообщество Overcoder
Наверх
Меню