分享
三行代码  ›  专栏  ›  技术社区  ›  Juraj Jakubov

Nodejs自动保护CSRF

  •  0
  • Juraj Jakubov  · 技术社区  · 1 年前

    我正在建立简单的节点CMS。我的问题很简单,我如何才能使自动CSRF保护?因为我认为这很危险,我可能会在形式或路线上错过这种保护。有什么方法可以使这个过程自动化吗?

    现在我用这个。

    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}}">
    

    包装CURSF。

    谢谢你的建议。

    1 回复  |  直到 1 年前
        1
  •  1
  •   Arthur Cinader    1 年前

    我觉得你走对了。

    中间件应该应用于所有POST请求*。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帖子( XMLHttpRequest )这也需要仔细考虑,并在这方面做了很好的阐述。 site .

    *如果您有API路由,则应将其分组并从CSRF中排除。