Привет всем, я разрабатываю веб-сайт для обмена фотографиями с использованием CodeIgniter PHP Framework . Идея состоит в том, что люди могут загружать свои фотографии, управлять ими (через своего рода файловый браузер, который позволяет им создавать подпапки, перетаскивать файлы и т. Д.) И редактировать их (некоторые основные вещи, такие как изменение размера, поворот и обрезка для начала, и позже я добавлю некоторые дополнительные функции).
Я уже внедрил стороннее решение для аутентификации для CI ( Redux Authentication 2 Beta ), и сейчас я интегрирую файловый менеджер JS / PHP ( AjaxExplorer ), но проблема в том, что бэкэнд PHP для управления файлами (перемещение, копирование и т. д.) слишком доверяет пользовательскому вводу из вызовов ajax. Например, он делает такие вещи (для ясности упрощено):
move_uploaded_file($_FILES['upload']['tmp_name'], $root.$username.$_POST['destination_dir']);
Как видите, существуют очевидные проблемы с безопасностью, так как он слепо принимает любой путь, который выберет пользователь! Я уже вижу, что кто-то отправляет что-то вроде "../AnotherUser/" в качестве значения $ _POST ['destination_dir'].
Мой вопрос: Каков наилучший способ «песочницы» пользователя, чтобы он мог только управлять своими собственными данными? Должен ли я просто проверять + фильтровать входные данные, надеясь перехватить каждую попытку вторжения? Существуют ли какие-либо библиотеки / пакеты, предназначенные для решения этой конкретной проблемы?
Я думаю, что эта проблема должна быть каким-то образом решена в любом (достаточно зрелом) проекте, который дает своим пользователям возможность управлять своими файлами через веб-браузер, поэтому я ожидал найти некоторые четкие рекомендации по этому вопросу (так как есть много о SQL-инъекциях, XSS, CSRF и т. д.), но, думаю, я не использую правильные ключевые слова.