Как динамически пропускать экспресс csurf на основе данных формы?

У меня есть третья сторона, которая хочет отправить форму через POST на мой веб-сайт, чтобы предварительно настроить некоторые входные данные. POST также используется для завершения формы и обработки данных, когда все поля заполнены.

Форма должна быть защищена CSRF, когда пользователь отправляет ее, а данные должны обрабатываться на стороне сервера, но должна пропускать проверку токена CSRF, когда третья сторона первоначально отправляет некоторые данные.

Какой чистый способ обойти проверку CSRF на основе данных, отправленных по определенному маршруту, и глагола/метода HTTP при использовании csurf?

Я вижу один из способов обойти это, используя разные конечные точки маршрута, но есть ли более прямое решение?


person Arc    schedule 20.07.2020    source источник


Ответы (1)


Вы можете найти ответ здесь: Вызов промежуточного программного обеспечения из в промежуточном ПО в NodeJS/ExpressJS. Дело в том, чтобы реализовать промежуточное программное обеспечение, которое будет вызывать промежуточное программное обеспечение csrf при совпадении условий или напрямую вызывать следующее промежуточное программное обеспечение с помощью next().

Пример:

app.use('my-route', (req, res, next) => {
    if (condition) {
        return csrfMiddleware(req, res, next);
    } else {
        return next();
    }
});

Если вы хотите использовать это промежуточное ПО для определенного глагола, замените app.use на app.<verb>. Например, app.get в значительной степени является промежуточным программным обеспечением, проверяющим глагол get.

person FroZn    schedule 20.07.2020
comment
Спасибо, я тоже думал об этом, но нашел его довольно запутанным и запутанным, потому что он реализует одну вещь на разных уровнях, и для этой проблемы только для одного случая. Что-то вроде бутерброда с csurf между ними. - person Arc; 21.07.2020
comment
Обновление: на самом деле я сделал что-то подобное сейчас, чтобы сделать это :-/ - person Arc; 23.07.2020
comment
@Arc, ты нашел здесь альтернативное решение? Я пытаюсь сделать запрос на своем экспресс-сервере внутри расширения Chrome, но я установил защиту csrf на этих маршрутах. - person The.Wolfgang.Grimmer; 07.12.2020