包含评估为 space 的 `+` 的查询字符串?
Querystring containing `+` evaluating to space?
我有一个参数,我将其作为 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
时 +
变成 </code></p>
<pre><code> querystringvalue = "R3oQCPn NVV4P0aL0LAZEL6Og1 Q2vOJJDJCSTY6WXE="
2) 当我使用 UrlDecode
然后 +
仍然变成 </code></p>
<pre><code> querystringvalue = "R3oQCPn NVV4P0aL0LAZEL6Og1 Q2vOJJDJCSTY6WXE="
3) 当我在 watch window 中看到我看到的奇怪的东西,
如您所见,查询字符串中存在 +
,但它已解析为 </code>。</p>
<p>所以我的问题是,</p>
<p>1) 为什么 <code>%3d
没有解析为 =
而 %2b
解析为 +
?
2)我能做些什么来解决这个问题?因为 %2b
解析为 +
然后解析为 </code> 给我错误的解密值和有时格式异常。</p>
<p><strong>更新</strong>
生成 <code>result
后,我直接将其附加到 URL,无需任何进一步处理 "page.aspx?taskid="+result
我要在这里冒险并假设您正在使用 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 中安全地传递令牌。这是您的选择吗?
我有一个参数,我将其作为 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
时 +
变成 </code></p>
<pre><code> querystringvalue = "R3oQCPn NVV4P0aL0LAZEL6Og1 Q2vOJJDJCSTY6WXE="
2) 当我使用 UrlDecode
然后 +
仍然变成 </code></p>
<pre><code> querystringvalue = "R3oQCPn NVV4P0aL0LAZEL6Og1 Q2vOJJDJCSTY6WXE="
3) 当我在 watch window 中看到我看到的奇怪的东西,
如您所见,查询字符串中存在 +
,但它已解析为 </code>。</p>
<p>所以我的问题是,</p>
<p>1) 为什么 <code>%3d
没有解析为 =
而 %2b
解析为 +
?
2)我能做些什么来解决这个问题?因为 %2b
解析为 +
然后解析为 </code> 给我错误的解密值和有时格式异常。</p>
<p><strong>更新</strong>
生成 <code>result
后,我直接将其附加到 URL,无需任何进一步处理 "page.aspx?taskid="+result
我要在这里冒险并假设您正在使用 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 中安全地传递令牌。这是您的选择吗?