Я делаю приложение NodeJS Express, которое в определенном сценарии получает запрос от пользователя, затем перенаправляет запрос на сторонний сайт и после получения ответа от третьего лица передает его обратно пользователю. Ничего сложного.Как обходить аксиомы, встроенные в CSRF-защиту?
У меня проблема с аксиомами модуля HTTP. Это похоже на то, что в него встроена некоторая защита 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)
}
})
Как уже упоминалось в комментариях к коду, если я посылаю запрос со строкой, которую я создал на сервере, все работает отлично, но если я использую строку, которая получена из данных запроса пользователя (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 }
Это выглядит как Аксиос, построенный в защите XSRF. Любые идеи, как обойти его, кроме использования другого пакета запросов HTTP?