2013-10-21 45 views
0

如何使用内置Express中间件实现HTTP GET请求来实现CSRF保护?如何在Express中实现GET请求的CSRF保护?

例如,用户注销通常通过GET请求进行,实际上改变了Web应用程序的状态,因此应该对CSRF进行保护。

不幸的是,CSRF中间件忽略了HTTP GET,并且不会导出助手来手动检查令牌。

回答

0

您可以创建不会忽略GET请求的Connect CSRF中间件的自定义分支。这样做的行是这里:https://github.com/senchalabs/connect/blob/master/lib/middleware/csrf.js#L76

但是,不要这样做。 GET请求是安全和幂等的:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

换句话说,没有人担心恶意网站脚本可能会从网站注销它们。担心的是,它可能会以您的名义发布垃圾邮件或从您的银行账户转账。这就是您需要CSRF防范的原因。其它更多的信息在这里:http://en.wikipedia.org/wiki/Csrf

+0

处理每一个GET请求,绝对是一个坏主意,原因大多不改变状态(这方法的方式或幂等的,无论如何)。我想知道我是否可以在一个特定的情况下做到这一点。 – toogle

+0

如果您担心恶意注销(我认为这不是一个现实的问题),那么您最好将其改为需要POST。 – dankohn

0

顺便说一句,他们现在暴露的明确设置忽略

app.use(csurf({ignoreMethods: ['HEAD', 'OPTIONS']}))