Находится ли файл вне папки publi c в express в безопасности? - PullRequest
0 голосов
/ 25 марта 2020

Я создаю сайт, используя Express.

У меня есть страница с формой для добавления статей. На моем сайте нет конфиденциальных данных, но я не хочу, чтобы люди могли публиковать статьи.

Поэтому мой вопрос: могут ли люди иметь доступ к любому файлу, который не находится в папке publi c ?

// Public directory
web.use(express.static(path.join(__dirname, 'public')));

Страница будет открыта с помощью токена (токен будет зашифрован и сохранен в файле json (вне папки publi c)

следующим образом:

// json file import
var data = require('../data/fileThatIsSafe.json');

// page render
web.get('/myPage/:token?', function(res, req) {
    if(encrypt(req.params.token) == data.token) {
        res.render('myPage');
    }
}

1 Ответ

1 голос
/ 25 марта 2020

Я не могу точно сказать, что токен имеет отношение к вашему вопросу, но если вы просто спрашиваете, безопасен ли ваш код express.static():

web.use(express.static(path.join(__dirname, 'public')));

Тогда ответ таков: express.static() (по умолчанию) не разрешает доступ ни к каким файлам за пределами каталога, который вы передаете. в вашем примере он обеспечивает доступ только к иерархии каталогов public. Если вы посмотрите на do c для express.static(), вы увидите параметр для dotfiles, который имеет следующие настройки:

Possible values for this option are:

"allow"  - No special treatment for dotfiles.
"deny"   - Deny a request for a dotfile, respond with 403, then call next().
"ignore" - Act as if the dotfile does not exist, respond with 404, then call next().

Значение по умолчанию для этой опции: "ignore" и вернет 404.

Итак, мой вопрос: могут ли люди иметь доступ к любому файлу, который не находится в папке publi c?

Не через ваше express.static() промежуточное ПО. Таким образом, единственный способ получить доступ к другим файлам на вашем сервере - это если у вас есть какой-то другой маршрут, который явно позволяет им запрашивать эти файлы.

В другом показанном вами маршруте, который, по-видимому, требует отправки соответствующего токена вместе с маршрутом, прежде чем вы отправите контент. Этот указанный c обработчик маршрута должен отправить какой-то ответ (возможно, ответ об ошибке), когда токен не совпадает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...