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中添加cookiesession支持,这是基础。

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变量还可以使用在其他地方。

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

你可能感兴趣的:(Express.js实现CSRF防护)