【发布时间】:2013-10-30 14:29:41
【问题描述】:
如何使用内置 Express 中间件对 HTTP GET 请求实施 CSRF 保护?
例如,用户通常通过 GET 请求注销并实际更改 Web 应用程序的状态,因此应保护它免受 CSRF 的影响。
很遗憾,CSRF 中间件会忽略 HTTP GET 并且不会导出帮助程序以手动检查令牌。
【问题讨论】:
如何使用内置 Express 中间件对 HTTP GET 请求实施 CSRF 保护?
例如,用户通常通过 GET 请求注销并实际更改 Web 应用程序的状态,因此应保护它免受 CSRF 的影响。
很遗憾,CSRF 中间件会忽略 HTTP GET 并且不会导出帮助程序以手动检查令牌。
【问题讨论】:
您可以创建一个不会忽略 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
换句话说,没有人担心恶意 Web 脚本可能会将他们从站点中注销。令人担心的是,它可能会以您的名义发布垃圾邮件或从您的银行账户中转出资金。这就是你需要 CSRF 来防范的。更多信息在这里:http://en.wikipedia.org/wiki/Csrf
【讨论】:
顺便说一句,他们现在公开了明确设置要忽略的方法的方式
app.use(csurf({ignoreMethods: ['HEAD', 'OPTIONS']}))
【讨论】: