【问题标题】:How to bypass axios built in CSRF protection?如何绕过axios内置的CSRF保护?
【发布时间】:2017-05-13 01:26:56
【问题描述】:

我正在制作一个 NodeJS Express 应用程序,它在某种情况下从用户那里获取请求,然后将请求转发到第 3 方站点,一旦收到第 3 方的响应,就会将其转发回用户.没什么太复杂的。

HTTP 模块 axios 有问题。它似乎内置了某种 XSRF 保护,这会导致我的应用程序抛出错误,即使在完成其他任何操作之前验证来自用户的请求数据也是如此。这是我的代码的简化版本:

const
  express = require('express'),
  router = express.Router(),
  { join } = require('path'),
  axios = require('axios')

router.get('/:logId', (req, res, next) => {
  const { logId } = req.params

  // validate logId, 1 or more digit number
  const pathRegex = /^\/?\d+$/g
  if (!pathRegex.test(logId)) res.status(400).end()
  else {
    const urlStr1 = join('http://example.com/', logId)

    // another string for comparison
    const urlStr2 = 'http://example.com/123'

    // this successfully logs out the expected result to console
    axios.get(urlStr2)
    .then(console.log)
    .catch(console.warn)

    // this throws an error
    axios.get(urlStr1)
    .then(console.log)
    .catch(console.warn)
  }
})

如代码 cmets 中所述,如果我使用在服务器上创建的字符串发送请求,一切正常,但是如果我使用源自用户请求数据的字符串(1+ 位数),会抛出以下错误:

 Error: connect ECONNREFUSED 127.0.0.1:80
    at Object.exports._errnoException (util.js:1012:11)
    at exports._exceptionWithHostPort (util.js:1035:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14)
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 80,
  config:
   { adapter: [Function: httpAdapter],
     transformRequest: { '0': [Function: transformRequest] },
     transformResponse: { '0': [Function: transformResponse] },
     timeout: 0,
     xsrfCookieName: 'XSRF-TOKEN',
     xsrfHeaderName: 'X-XSRF-TOKEN',
     maxContentLength: -1,
     validateStatus: [Function: validateStatus],
     headers:
      { Accept: 'application/json, text/plain, */*',
        'User-Agent': 'axios/0.15.3' },
     method: 'get',
     url: 'http:/example.com/44',
     data: undefined },
  response: undefined }

这看起来像是 axios 内置的 XSRF 保护。除了使用另一个 HTTP 请求包之外,任何想法如何绕过它?

【问题讨论】:

    标签: node.js express xmlhttprequest csrf axios


    【解决方案1】:

    您可以使用最初为服务器创建的request 模块,而axios 最多用于客户端。

    【讨论】:

      猜你喜欢
      • 2020-09-13
      • 2017-04-04
      • 2013-10-07
      • 2011-04-29
      • 1970-01-01
      • 2020-09-22
      • 2021-07-24
      • 2017-10-20
      • 1970-01-01
      相关资源
      最近更新 更多