Предотвращение обхода каталогов в PHP, но разрешение путей

Я не уверен, что это будет кому-нибудь полезно, так как мне пришлось предоставлять другим пользователям системы для планирования заданий, не предоставляя им доступ к фактическому планировщику задач сервера (windows), я создал это повторно используемое приложение.

Обратите внимание, что пользователи имеют доступ к одной общей папке на сервере, где они могут создавать необходимые команды / task / .bat. Эта задача может быть запланирована с помощью этого приложения.

Имя приложения - Django_Windows_Scheduler

Снимок экрана: enter image description here

33
задан NullPoiиteя 10 December 2012 в 16:59
поделиться

1 ответ

При изучении создания новых файлов или папок, я полагал, что могу использовать два подхода этапа:

Первая проверка на пересекающиеся попытки с помощью пользовательской реализации realpath() как функция, которая однако работает на произвольные пути, не только существующие файлы. Существует хорошая начальная точка здесь . Расширьте его с помощью urldecode() и независимо от того, что Вы думаете, может стоящий проверки.

Теперь использование этого сырого метода можно отфильтровать некоторые пересекающиеся попытки, но может быть возможно, что Вы пропускаете некоторую hackish комбинацию специальных символов, символьных ссылок, выходя из последовательностей и т.д., Но так как Вы знаете наверняка, что конечный файл не существует (проверьте использование file_exists), никто ничего не может перезаписать. Худший вариант развития событий был бы то, что кто-то может получить Ваш код, создающий файл или папку где-нибудь, которая может быть приемлемым риском в большинстве случаев, предоставил Ваш код, не позволяет им немедленно записать в тот файл/папку.

Наконец, таким образом, путь теперь указывает на существующее местоположение, поэтому можно теперь сделать надлежащую проверку с помощью методов, предложенных выше использования realpath(). Если в этой точке оказывается, что обход произошел, Вы все еще в безопасности более или менее, пока Вы удостоверяетесь, что предотвратили любые попытки, пишущие в путь назначения. Также прямо сейчас можно удалить конечный файл / dir и сказать, что это была пересекающаяся попытка.

я не говорю, что это не может быть взломано, так как, в конце концов, все еще это может позволить незаконным изменениям быть сделанными к FS, но еще лучше, чем только выполнение пользовательских проверок, которые не могут использовать realpath(), и окно для злоупотребления, оставленного открытым путем создания временного и пустого файла или папки где-нибудь, ниже, чем разрешение им сделать это постоянным и даже записать в него, как это произошло бы только с пользовательской проверкой, которая может пропустить некоторые пограничные случаи.

Также исправляют меня, если я неправ!

0
ответ дан 27 November 2019 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: