【问题标题】:How to implement CSRF protection for GET requests in Express?Express中的GET请求如何实现CSRF保护?
【发布时间】:2013-10-30 14:29:41
【问题描述】:

如何使用内置 Express 中间件对 HTTP GET 请求实施 CSRF 保护?

例如,用户通常通过 GET 请求注销并实际更改 Web 应用程序的状态,因此应保护它免受 CSRF 的影响。

很遗憾,CSRF 中间件会忽略 HTTP GET 并且不会导出帮助程序以手动检查令牌。

【问题讨论】:

    标签: node.js express csrf


    【解决方案1】:

    您可以创建一个不会忽略 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

    【讨论】:

    • 处理每个 GET 请求绝对是个坏主意,因为它们中的大多数都不会改变状态(或幂等)。我想知道我是否可以在一种特殊情况下做到这一点。
    • 如果您担心恶意注销(我认为这不是现实问题),您最好将其更改为需要 POST。
    【解决方案2】:

    顺便说一句,他们现在公开了明确设置要忽略的方法的方式

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

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 2015-03-03
      • 2022-10-17
      • 2019-01-25
      • 2012-03-15
      • 2014-02-19
      • 2022-06-18
      • 2014-09-23
      • 2017-11-22
      相关资源
      最近更新 更多