Node.js 防止跨站请求伪造(CSRF)

示例

CSRF是一种攻击,它迫使最终用户在当前已通过身份验证的Web应用程序上执行不需要的操作。

之所以会发生这种情况,是因为Cookie随每个请求一起发送到网站-即使这些请求来自其他站点。

我们可以使用csurf模块创建csrf令牌并对其进行验证。

var express = require('express')

var cookieParser = require('cookie-parser')    //用于cookie解析

var csrf = require('csurf')    //csrf模块

var bodyParser = require('body-parser')    //用于身体解析

// 设置路由中间件

var csrfProtection = csrf({ cookie: true })

var parseForm = bodyParser.urlencoded({ extended: false })

// 创建快递应用

var app = express()

// 解析Cookie

app.use(cookieParser())

app.get('/form', csrfProtection, function(req, res) {

  // 生成并将csrfToken传递给视图

  res.render('send', { csrfToken: req.csrfToken() })

})

app.post('/process', parseForm, csrfProtection, function(req, res) {

  res.send('data is being processed')

})

因此,当我们访问时GET /form,它将把csrf令牌传递csrfToken给视图。

现在,在视图内部,将csrfToken值设置为名为的隐藏输入字段的值_csrf。

例如用于handlebar模板

<form action="/process" method="POST">

    <input type="hidden" name="_csrf" value="{{csrfToken}}">

    Name: <input type="text" name="name">

    <button type="submit">Submit</button>

</form>

例如用于jade模板

form(action="/process" method="post")

    input(type="hidden", name="_csrf", value=csrfToken)

    span Name:

    input(type="text", name="name", required=true)

    br

    input(type="submit")

例如用于ejs模板

<form action="/process" method="POST">

    <input type="hidden" name="_csrf" value="<%= csrfToken %>">

    Name: <input type="text" name="name">

    <button type="submit">Submit</button>

</form>

           

以上是 Node.js 防止跨站请求伪造(CSRF) 的全部内容, 来源链接: utcz.com/z/337920.html

回到顶部