Пуленепробиваемый способ запретить указанным пользователем именам файлов использовать относительные элементы пути в приложении Node.JS? - PullRequest
0 голосов
/ 12 февраля 2019

Я создаю приложение Node.JS, которое позволяет пользователям редактировать различные документы.Подкаталог создается на сервере для каждого пользователя, используя его идентификатор пользователя в качестве имени подкаталога.Я не хочу использовать базу данных в настоящее время, потому что я создаю прототип в сжатые сроки, поэтому сейчас я использую файловую систему для быстрого выполнения задач.

Обратите внимание, что пользователи получают доступ к системе через веб-браузер с одной из моих веб-страниц.

Когда пользователь создает документ, он указывает его имя.Прямо сейчас на стороне сервера имя документа очищается от любых символов, которые не поддерживаются операционной системой (Linux), но это все.Меня беспокоит то, что пользователь может попытаться получить доступ к каталогу, который ему не принадлежит, используя относительные компоненты пути, вставленные в имя документа, в попытке «пройтись вверх и вниз» по дереву каталога, чтобы вырваться из подкаталога.защищены от них.

Я прочитал несколько страшных историй о том, как пользователи находят хитрые способы сделать это с помощью экзотических кодов UTF-8 и т. д., поэтому я ищу пример кода или библиотеку Node.JS, котораяимеет функцию, которая удаляет все относительные элементы пути из имени файла тщательным и надежным способом.

Как на стороне сервера я могу быть абсолютно уверен, что созданное пользователем имя документа, отправленное в POST избраузер - это основное имя файла и ничего больше?

...