最近我正在研究一些请求签名algorithm,提出了在签名部分包含查询string的意见是“多样化的”。
长话短说,人们反对在string中包含查询string以进行签名的观点是查询string可以被改变(例如,值可以被改变,参数可以被删除/添加,可以被改变)。
我也从来没有经历过代理或负载均衡器中的这种行为,尽pipe我经历过诸如隐藏Authorization头(例如Apache / WSGI),修改请求方法(通过负载均衡器,可能是亚马逊的服务器做这样的事情) 。 我知道这样的行为可以在反向代理或负载均衡器上启用,使用一些自定义脚本/规则,但是可以在请求的任何部分完成。
基于假定查询string应该被包括进行了很多工作,再加上看起来很愚蠢的是,不签名请求中最重要的部分之一。 因此,我需要知道如果在原始表单中包含查询string(因为它在URL中传递)将是未来的问题。
所以我的问题是:
任何代理或负载均衡器通常会改变查询string? 这对我来说似乎很愚蠢。 你知道任何默认的代理或负载均衡器(软件或其安装)吗?
我相信在这种情况下,我们可以在代理/负载均衡器的层面上处理签名validation,但如果这是我们不能控制的中介机构常见的话,这可能是一个可行的论点。
请让我知道你知道什么。 让我知道,如果你有任何问题。
作为澄清,通过查询string,我的意思是以下URL中的“ ?arg1=val1&arg2=val2 ”部分:
http://example.com/something/else?arg1=val1&arg2=val2
通过“ 改变查询string ”我的意思是任何可能使它看起来不同的客户端和服务器(服务器看到查询string不同于客户端使用)的任何操作。
许多现代的反向代理可以改变查询string。 但是我没有看到为什么一个负载平衡器或代理默认会这样做。
也许它使用URI进行粘性会话负载平衡,但这将是非常愚蠢的。
所以:不,我不知道任何负载平衡器,默认改变uri和参数。
我还没有看到一个代理,但它可以成为一个可行的解决scheme会话粘性,如果你不能做到每个IP,并希望它工作,即使用户禁用cookie。