axios BaseURL config vs absolute URL

4xrmg8kj  于 5个月前  发布在  iOS
关注(0)|答案(3)|浏览(84)

你的功能请求是否与问题相关?请描述。

我认为经验较少的开发人员不知道Axios在优先考虑绝对URL而不是BaseURL属性配置方面的行为。
这种情况可能会在以下用例中产生SSRF类型的漏洞:

config.defaults.BaseURL = 'http://mysite.com';
  path = req.query.path;
  axios.get(path);

恶意用户可以输入类似' http://evil.com/ '(绝对URL)的路径值,并将请求指向不同的站点。

描述你希望的解决方案

虽然可以验证用户输入不包含绝对URL,但我认为更安全的做法是有一个配置属性,允许或拒绝绝对URL。示例:
allowAbsoluteURL = false/true
true反映正常的Axios行为。
false在满足以下条件时,requests中的每个方法都会生成异常:

  • restclient方法接收到一个绝对URL作为参数。
  • restclient配置中明确声明了BaseURL的值。
  • BaseURL的值不是作为参数接收到的绝对URL的前缀。

描述你考虑过的替代方案

  • 无响应*

其他上下文/截图

  • 无响应*
mlmc2os5

mlmc2os51#

团队成员,我认为这是一个安全问题。就我所看到的文档中没有提到,在设置BaseURL属性后,完整URL总是会被解析为这样的格式。

我知道这可能是一个破坏性的变化,但如果默认情况下设置了BaseURL,它应该永远不会尝试识别路径参数是否是完整的,并且总是尝试使用baseURL+path创建最终的URL。

sg2wtvxw

sg2wtvxw2#

你好,
我想处理这个问题。请将它分配给我。

mqkwyuun

mqkwyuun3#

刚刚推送了一个PR,允许您通过请求修改名为axios.defaults.allowAbsoluteUrls的参数或提供一个名为allowAbsoluteUrls的配置参数来更改此行为。将参数设置为false将导致指定的路径与基本URL结合,无论其是否为绝对路径。此值默认为true,保留原始行为。

最小示例: 将发出对https://www.miketoscano.com/https://www.google.com(组合URL)的请求

import axios from './axios.js';

axios.defaults.baseURL = 'https://www.miketoscano.com';
axios.defaults.allowAbsoluteUrls = false;

console.log(axios.defaults);

axios.get('https://www.google.com').then( (response) => {
    console.log(response);
    console.log('done');
});

最小示例2: 将发出对http://someurl.com/http://someotherurl.com/(组合URL)的请求

const instance = axios.create({
      baseURL: 'http://someurl.com/',
      allowAbsoluteUrls: false
    });

    instance.get('http://someotherurl.com/');
});

相关问题