Express.js实现CSRF防护

不赘述什么是csrf了,关于怎么方式csrf伪造,网上有很多资料可以查,比如http://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/ 。我这里直说怎么在express.js里实现方式防护csrf的。

       最近mentor想试试node.js。所以新项目就用node.js来做了。采用express.js作为web框架。express.js里面有很多中间件和框架来实现各种功能,基本上能满足“要什么有什么”的需求了。其能力和python等一众脚本语言差不多。

       关于express.js怎么使用,https://github.com/nswbmw/N-blog/wiki/_pages 这里有很好的系列教程。我在项目中需要实现方式csrf的功能,基本上就是,需要在提交的表单中添加一个<input type=”hidden” name=”_csrf” value=_csrf />的内容,然后再提交post表单的时候,这个字段也被作为post的参数传递到服务端。      下面是实现方法。

       在app.js中添加cookie、session支持,这是基础。

app.use(express.cookieParser());

app.use(express.session({

    secret: settings.cookieSecret,

}));


然后添加csrf防护中间件支持。


app.use(express.csrf());
app.use(function(req, res, next){
    res.locals.csrf = req.session ? req.session._csrf : "";
    next();
});


注意上面的第三行,这里讲csrf值添加进了本地变量中。这样在渲染模板中就可以直接使用这个值了。在相关的.ejs文件中,做如下相应改变(注意我使用的是ejs模板渲染引擎)。


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


注意上面,我直接在<%= %>标签中使用了csrf变量,这个变量就是在res.locals.csrf=req.session?req.session._csrf:””这时候被赋值并添加进本地变量中的,可以在渲染模板中直接使用。locals变量还可以使用在其他地方。

基本上就是这样,简单,但是需要点明。

转载于:https://my.oschina.net/GanQtStay/blog/195123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值