浏览器查询参数与表单数据的优先级问题

在提交数据的实验中,突然冒出一个这样的想法:在请求地址中与表单数据中同时添加同样的参数,并赋予不同的值,那么服务器获取参数时,究竟是取查询参数中的值,还是表单数据中的值?

以用户登录为例,假定登录地址为login,在查询参数中与表单数据中同时添加信息,代码如下:

//  已引入jQuery库
$.post('/params?username=yiifaa&password=yiifaa', {
    username : 'yiifee',
    password : 'yiifee'
}, function(datas) {
    console.log(datas);
})

那么服务器端接收的username到底是yiifaa呢,还是yiifee呢?

首先查看浏览器提交的请求信息,发现浏览器将查询参数与表单数据都提交给了服务器,见下图:![查询参数与表单数据]
地址参数与表单数据

那么服务器端是怎么处理的呢?
如果通过request.getParameter()方法进行获取,我们发现,获取的值始终都为请求地址参数中的值,但如果用request.getParameterValues()方法进行获取,返回的值为String数组,且请求地址参数放在第一位,紧跟着才是表单数据中的值,服务端代码如下:

@RequestMapping(value = "/params", method = RequestMethod.POST)
public Map<String, String[]> params(HttpServletRequest request) {
    //  总是获取到地址参数中的值
    String username = request.getParameter("username");
    //  可通过request.getParameterValues("username")获取所有的值
    return request.getParameterMap();
}

最后服务器端的返回结果如下,说明查询参数与表单数据都是有效的赋值,只是优先级有差异:

{
    "username":["yiifaa","yiifee"],
    "password":["yiifaa","yiifee"]

}

结论

通过在查询参数中添加参数与赋值,可以覆盖表单中提交的数据信息,这是否又为XSS(跨站脚本攻击)打开了一扇窗呢?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值