Обеспечить безопасный URL-адрес узла
Я использую nodejs, и часть моего сайта будет просто обслуживать файлы, в основном используя fs.readFile
на определенный каталог, содержащий публичные файлы. Например, когда вы запрашиваете mydomain.com:1234/hello/info.html
мой скрипт запросит файл publicfiles/hello/info.html
и отправьте результаты клиенту. Тем не менее, я знаю, что если злоумышленник вошел в mydomain.com:1234/../evilurl/userpasswords.txt
nodejs попытается получить файл publicfiles/../evilurl/userpasswords.txt
что на самом деле так же, как evilurl/userpasswords.txt
другими словами, они могли получить доступ к файлам из publicfiles
каталог и доступ к "безопасной" информации. Я знаю, что смогу защититься от этого, просто убедившись, что req.url
не содержит ..
, но есть ли другой способ получить доступ к плохим файлам? Могут ли они использовать какую-то escape-последовательность вместо ..
что значит одно и то же? Также я не хочу использовать экспресс для этого. Если есть библиотека специально для этого, у меня все хорошо, но я не хочу такой огромной структуры, как express.
1 ответ
Я тоже выступаю за использование готового пакета для подачи статического контента. Я бы сказал, что вы должны использовать httpd / ngnix для обслуживания статического контента.
Как говорится, вы могли бы использовать path.resolve()
, Разрешите путь запроса к вашей базе publicfiles/
каталог, и убедитесь, что результат имеет publicfiles/
в качестве префикса. Если это не так, то это плохой запрос.