Hotmail 与编码的 URL 参数混淆

Posted

技术标签:

【中文标题】Hotmail 与编码的 URL 参数混淆【英文标题】:Hotmail messing with encoded URL parameters 【发布时间】:2011-12-21 21:35:36 【问题描述】:

我们有一个系统可以发送带有链接的常规电子邮件,其中许多包含 URL 编码参数,例如:

href="http://www.mydomain.com/login.aspx?returnurl=http%3A%2F%2Fwww.mydomain.com%2Fview.aspx%3Fid%3D1234%26alert%3Dtrue"

可以看到“returnurl”参数被编码了。但是,似乎我们的大量用户(看似 hotmail)正在接收带有此参数部分解码的电子邮件,例如:

href="http://www.mydomain.com/login.aspx?returnurl=http://www.mydomain.com/view.aspx?view.aspx%3Fid%3D1234%26alert%3Dtrue"

为什么会这样解码?为什么只部分解码??因此,我不知道如何处理它。我想到了base-64编码,但是base64字符串也包含需要解码的字符...我想到了双重编码,但是我不知道是否对参数进行双重解码...有人可以帮忙吗?谢谢。

【问题讨论】:

我们也向 hotmail 用户提出这个问题。链接在 gmail 等中工作正常。有人吗? 当然。登录到 Hotmail 帐户,创建一个带有链接的新电子邮件,就像原来的一样,然后发送给自己。现在查看消息来源并了解 Hotmail 是如何格式化此消息的。 【参考方案1】:

这可能发生的一个原因是因为用于编码 are different before and after ? 的 url 规则,所以如果正在解码的机制是从 url 的“后面”执行它,并且苹果查询解码规则,直到它找到第一个 ? 然后这可能会导致您描述的问题...

不知道如何处理它,但据我了解,执行这种不适当解码的系统不在您的控制范围内。我会尝试以某种方式隐藏 ? 以返回 url 查询......

【讨论】:

returnurl= 之后的所有内容编码为base64 怎么样?然后解码并转发到服务器端的解码路径?您可以完全跳过标准 URL 编码。我看到很多网站都在这样做。

以上是关于Hotmail 与编码的 URL 参数混淆的主要内容,如果未能解决你的问题,请参考以下文章

第一个 url 参数与所有 url 地址混淆

URL详解与URL编码

基础进阶URL详解与URL编码

Laravel 本地化与 Route Resource 参数混淆

PostMan发送请求参数带有路径特殊字符会返回400错误(与URL字符及URL编码值有关)

PostMan发送请求参数带有路径特殊字符会返回400错误(与URL字符及URL编码值有关)