3

由于我决定通过查询字符串传递特定记录的 id,所以我加密了 id ( id=090ed4fe-daec-452d-b025-f664dcc1164d) 并将其值附加到 url。

我们都知道 / 的 url 编码值为 %2f。因此,在应用程序的特定实例上id=090ed4fe-daec-452d-b025-f664dcc1164d,经过加密然后编码的 id 值 () 返回一个值:

M2vaIbPkOqO6lw4jv%2bqE2f%2fhTrK495ny92uPcLBOJBNcMpg1RUme%2fvAo6LyKfdp9e

当我将鼠标悬停在链接上时,我得到:

M2vaIbPkOqO6lw4jv+qE//hTrK495ny92uPcLBOJBNcMpg1RUme/vAo6LyKfdp9e

对于正确的“加密和编码”部分。但是当我使用该Context.Request.RawUrl属性来检索我得到的 url 时:

M2vaIbPkOqO6lw4jv+qE/hTrK495ny92uPcLBOJBNcMpg1RUme/vAo6LyKfdp9e

所以问题是它从字符串中删除了一个(1)'/',因此我不能再解密字符串了。

顺便说一句,我已经使用这个模块几个月了,从来没有遇到过这个问题。事实证明,我第一次有两个(2)'/'(2f%2f)彼此相邻。

请问,无论如何我可以Context.Request.RawUrl返回正确的字符串并阻止它剥离一个(1)'/'吗?

4

1 回答 1

0

听起来很像您正在遭受URL 规范化的影响,请以某种方式查看“删除重复的斜杠”。*值得一提的是,您的编码示例显示,在第一个之前%2bqE2f%2f缺少。这有关系吗?%2f

也就是说,我完全无法重现您的问题(使用下面显示的测试用例),所以也许您可以分享更多信息?

WebForm1.aspx(为简洁起见,跳过 head/body/form 标签):

<a href="WebForm1.aspx?id=M2vaIbPkOqO6lw4jv+qE//hTrK495ny92uPcLBOJBNcMpg1RUme/vAo6LyKfdp9e">Click!</a>
<a href="WebForm1.aspx?id=M2vaIbPkOqO6lw4jv%2bqE%2f%2fhTrK495ny92uPcLBOJBNcMpg1RUme%2fvAo6LyKfdp9e">Click Encoded!</a>
<br />
<br />
<asp:Label runat="server" ID="myLabel">
</asp:Label>

WebForm1.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    myLabel.Text = "<pre>" + Request.RawUrl + "</pre>";
}
于 2010-11-03T15:08:53.467 回答