FEMessage / el-data-table

🥘Base on element-ui, makes crud easily
https://femessage.github.io/el-data-table/
MIT License
486 stars 112 forks source link

fix: 查询参数为数组时需要将数组转为字符串形式 #314

Closed zenghao1203 closed 4 years ago

zenghao1203 commented 4 years ago

Why

当查询参数为数组时,需要将参数转化为字符串。因为在发送请求时,数组参数会被处理;列如:

const query = {
  area: ['south','west']
}

//会变成
const query = {
  area[]: 'south',
  area[]: 'west'
}

在大多数项目中已使用数组参数,都转化为了字符串的形式。会导致查询接口报错。

How

只需在处理query参数时,加上一个判断,如果是使用的数组,那么将数组转化为字符串即可

const area = ['south','west']
const areaString = area.toString().trim()   // south,west

Test

before

before

after

after

netlify[bot] commented 4 years ago

Deploy preview for el-data-table ready!

Built with commit 8f6560bf13c76b2c3027ca78e4d2e4c6a979b080

https://deploy-preview-314--el-data-table.netlify.app

gd4Ark commented 4 years ago

之前有个 pr 为了解决参数为数组时刷新不丢失的问题,存放 url 的时候特地保留数组的形式,以便正常 decode。 所以仅仅要修改发送请求时的参数的话,这里修改 query 的时机还太早,把他放到构造请求参数前就正常了

levy9527 commented 4 years ago

@all-contributors add @zenghao1203 bug

allcontributors[bot] commented 4 years ago

@levy9527

I've put up a pull request to add @zenghao1203! :tada:

shoyuf commented 4 years ago

这段代码修改了axios请求的默认行为 当 params 中一个值为数组时,比如{a:[1,2]}

HTTP协议中是允许同样名称的参数出现多次。 各服务端接受参数的方式与各语言(框架)的实现方式有关

参考资料:

  1. 安全 - 为企业级框架和应用而生
  2. Web 应用里的 HTTP 参数污染(HPP)漏洞 - CSDN
  3. ebay 因参数污染存在 RCE(远程命令执行)漏洞