Nodejs делают автоматическую защиту csrf - PullRequest
0 голосов
/ 15 ноября 2018

Ну, я строю простой nodejs CMS.Мой вопрос прост, как я могу сделать автоматическую защиту CSRF?Потому что я думаю, что это опасно, и я могу пропустить эту защиту по форме или маршруту.Есть ли способ, как автоматизировать этот процесс?

В данный момент я использую это.

Routes.js

// CSRF
var csrfProtection = csrf({
    cookie: true
})
var parseForm = bodyParser.urlencoded({
    extended: false
})

// Register
router.get("/register", csrfProtection, shouldNotBeAuthenticated, function (req, res) {
    res.render("../modules/users/views/register", {
        title: 'Register',
        csrfToken: req.csrfToken
    });
});

router.post("/register", parseForm, csrfProtection, authController.user_reigster);

Форма

<form method="post" action="/users/register">
  <input type="hidden" name="_csrf" value="{{csrfToken}}">

пакет CSURF.

Спасибо за любой совет.

1 Ответ

0 голосов
/ 16 ноября 2018

Я думаю, что вы на правильном пути.

Промежуточное программное обеспечение должно применяться ко всем запросам POST *.Пример в readme CSURF показывает способ сделать это (стоит внимательно прочитать):

// mount api before csrf is appended to the app stack
app.use('/api', api)

// now add csrf and other middlewares, after the "/api" was mounted
app.use(bodyParser.urlencoded({ extended: false }))
app.use(cookieParser())
app.use(csrf({ cookie: true }))

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

Если вы выполняете AJAX POST ( XMLHttpRequest ), это будеттакже должны быть продуманы и хорошо освещены на этом сайте .

*, если у вас есть API-маршруты, они должны быть сгруппированы и исключены из CSRF.

...