我最近在分析某出行平台网页端的时候,注意到一个很有意思的细节:几乎每个接口请求的 URL 后面,都跟着一长串网页参数,名字叫 wsgsig。值是一段混着字母和数字的字符串,有的请求长一点、有的短一点,但每次请求它都会变。刚开始我以为只是普通的会话标识,后来改了 URL 里的一个城市 ID 再重放请求,服务端直接给我报了一个参数校验失败。这时候我才真正意识到,这玩意儿是整套请求签名体系里比较关键的一环。
这篇内容把我从“看到参数”到“找到生成逻辑”,再到“理解整套签名机制”的完整过程整理出来。无论你是刚接触网页参数的前端,是需要联调接口的客户端开发,还是整天跟接口打交道的测试和运维,都可以顺着这条思路走一遍。重点不在“破解某一个平台”,而是掌握一套分析签名参数的通用方法,并且把它用在合规、合法的技术场景里。
1. 初识wsgsig:它到底是网页端的哪一类参数
1.1 签名参数的本质:一次请求的“防篡改封条”
在网页端开发里,wsgsig这种参数并不是什么神秘的东西,它本质上是一类“签名参数”。签名参数做的事情很简单:客户端在发起请求前,把请求里参与签名的字段,比如 URL 路径、查询参数、时间戳、随机数,甚至某个固定密钥,按照约定好的规则拼装成一段字符串,再用摘要算法算出一段固定长度的值,放到请求参数里一起发给服务端。
服务端收到请求后,用同一套规则重新计算一遍签名,再和请求里携带的 wsgsig 做比对。两边算出来一样,说明请求在传输过程中没有被篡改过,而且基本可以确认调用方知道约定好的签名规则。如果不一样,服务端就会直接拒绝,不会继续处理后面的业务逻辑。
这么说可能有点抽象,拿快递打比方:寄件人把包裹里所有物品列了个清单,然后给清单加了个防拆封条,收件人拿到包裹后自己重新清点一遍,如果物品和清单对不上,就知道包裹中途被人动过。wsgsig 就是那张封条。
1.2 出行平台为什么普遍长这样
大家平时用出行类 App 或网页时,最关心的无非是车费预估价、实时路况、附近车辆、订单状态这类实时数据。这些数据的特点是变化快、敏感度高,而且很多接口是面向所有用户的。如果服务端直接开放一个裸接口,参数随手一改就能影响返回结果,那问题就大了。
比如把城市 ID 从 A 改成 B,如果接口没有签名校验,返回的计价规则可能就变了;把订单 ID 顺序遍历一遍,甚至可能拿到不属于自己的订单信息。签名参数虽然不能解决所有安全问题,但它能挡住一大票“直接改参数重放”的批量脚本。这也是为什么出行平台在设计前端接口时,普遍会引入类似 wsgsig 的机制。
另外还有一层原因:这类平台的前端通常是一个很大的单页应用,接口数量多、请求频率高,服务端不可能每一个请求都去走完整登录态校验,但又要保证请求来自经过认证的调用环境。用签名参数做一层轻量校验,成本相对低,覆盖面却很大。
1.3 动手前先把参数的基本盘摸清楚
看到 wsgsig 之后,我的习惯是先别急着去翻 JS 找生成函数,而是先把参数的基本盘记录下来。这里的“基本盘”包括几个很基础的事实:
- 它出现在哪些接口里?是所有接口,还是只有某些业务接口?
- 值的长度是多少?是固定 32 位、40 位、64 位,还是长度会变化?
- 字符集是什么样的?是只有 0-9、a-f,还是包含完整字母数字甚至符号?
- 每次请求是否都会变?如果请求参数完全不变,wsgsig 会不会变化?
- 请求失败时,服务端返回的错误信息是什么?是“sign error”还是通用的 400?
这些问题看起来琐碎,但每一条都能帮你在后面省掉很多时间。比如长度固定且只有十六进制字符,大概率是 MD5 或 SHA 系列摘要;如果包含大小写字母和符号,可能是 Base64 编码过的二进制摘要,或者加密后的密文。这些观察结果会直接决定你后续的排查方向。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 用浏览器开发者工具一步步“圈”出生成位置
2.1 从Network面板找到最原始的请求样本
分析网页参数最常用的工具,依然是浏览器自带的开发者工具。打开 DevTools 后切到 Network 面板,勾选 Fetch/XHR,然后在网页上正常操作一次,比如查询某个城市的出行价格,你就能看到对应的接口请求。
找到请求后,把它点开,重点看三个地方:General 里的 Request URL、Query String Parameters,以及 Request Headers。wsgsig 如果是一个 GET 请求参数,通常就会直接出现在 Query String Parameters 里;如果请求是 POST,它也可能在请求体里,或者在某个自定义 Header 里面。先确认它“长在哪个位置”,比什么都重要。
我通常会把请求右键复制成 cURL 格式,保存到一个临时文件里,方便后续用命令行或接口测试工具复现。复制的 cURL 里会带上 Cookie、User-Agent、Referer 等完整头信息,这可以让你在后面做变量对照时,不用反复回到浏览器里去找请求头。
注意一点:不要在 Network 面板里看到一个 wsgsig,就马上认为它和登录态无关。有的
