Обеспечить безопасный 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/ в качестве префикса. Если это не так, то это плохой запрос.

Другие вопросы по тегам