【问题标题】:Querystring containing `+` evaluating to space?包含`+`的查询字符串评估为空间?
【发布时间】:2015-03-18 15:22:20
【问题描述】:

我有一个参数,我将其作为querystring 传递给页面URL。在将值作为querystring 传递之前,我正在加密该值。但是,加密值有时会在querystring 中包含+。我知道它在URL 中有特殊含义。所以我使用Server.UrlEncode(encryptedvalue) 来保证它的安全。但是,当我得到Querystring 时,只有+ 在解码URL 之前得到评估。

这是生成查询字符串的代码,

var result =  Server.UrlEncode(this.UserSecurity.Encrypt<string>(value));

querystring(result) 的这个值是+ 之后变成%2b 符合预期

querystringvalue = "R3oQCPn%2bNVV4P0aL0LAZEL6Og1%2bQ2vOJJDJCSTY6WXE%3d"

我无法控制Encryption 方法,所以我不能在那里更改。

所以当我访问重定向页面时,

1) 当我不使用 UrlDecode 时,+ 变为

  querystringvalue = "R3oQCPn NVV4P0aL0LAZEL6Og1 Q2vOJJDJCSTY6WXE="

2) 当我使用UrlDecode 时,+ 仍然变为

  querystringvalue = "R3oQCPn NVV4P0aL0LAZEL6Og1 Q2vOJJDJCSTY6WXE="

3)当我在监视窗口中看到这里时,我看到了奇怪的东西,

如您所见,查询字符串中存在+,但它被解析为

所以我的问题是,

1) 为什么%3d 没有解析为=%2b 解析为+
2)我能做些什么来解决这个问题?因为%2b 解析为+,然后解析为,给了我错误的解密值和有时格式异常。

更新 生成 result 后,我直接将其附加到 URL,无需任何进一步处理,如 "page.aspx?taskid="+result

【问题讨论】:

  • 在下一个请求之前你对result做了什么?
  • 没什么,它作为查询字符串直接附加到 URL。
  • 好的,我们能看到那个代码吗?以及如何将 URL 返回给客户端? (即,这是一个重定向,作为链接嵌入到页面中吗?)
  • 您可以使用修改后的 Base64 编码,它不使用 + 而不是 UrlEncode
  • 答案中提到的 @CoderofCode UrlTokenEncode 看起来就是这样做的。

标签: c# asp.net query-string urlencode url-encoding


【解决方案1】:

我将在这里冒个险,假设您正在使用 BASE64 对加密数据进行编码,可能使用Convert.ToBase64String

你能修改Encrypt 函数吗?如果是这样,请尝试使用HttpServerUtility.UrlTokenEncode 对字节进行编码:

https://msdn.microsoft.com/en-us/library/system.web.httpserverutility.urltokenencode

要转换回byte[],请使用对称HttpServerUtility.UrlTokenDecode 方法。

https://msdn.microsoft.com/en-us/library/system.web.httpserverutility.urltokendecode

这将允许您在 URL 中安全地传递令牌。这是您的选择吗?

【讨论】:

  • 我没有使用Convert.ToBase64String 来加密数据。实际上Encryption 是由算法完成的(我不知道是哪个,也无法访问我提到的代码)。
  • 再想一想(当我开始阅读它时)我可以使用ENCODEDECODE 使用UrlTokenEncode 转换我的加密字符串。
  • 对我有用。谢谢 。但是你怎么看我的1 问题。
  • OK 太好了 - 一般来说,Server.UrlEncode() 方法捕获的字符数不如 Uri.EscapeDataString()。我不完全确定为什么要按照他们的方式实施,但后者似乎几乎可以处理所有情况。
猜你喜欢
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多