【问题标题】:HttpServerUtility.UrlTokenDecode fails "sometimes" (Invalid length for a Base-64 char array.)HttpServerUtility.UrlTokenDecode“有时”失败(Base-64 字符数组的长度无效。)
【发布时间】:2009-09-08 09:31:22
【问题描述】:

我们有一个IHttpHandler 用于样式表,并向页面添加一个<link/> 标记,如下所示:

HtmlGenericControl link = new HtmlGenericControl("link");
link.Attributes.Add("rel", "stylesheet");
link.Attributes.Add("href", "stylesheet.axd?d=" +
                                    HttpServerUtility.UrlTokenEncode(token));
head.Controls.Add(link);

stylesheet.axd处理程序中,我们UrlTokenDecoded查询字符串参数是这样的:

var token = HttpServerUtility.UrlTokenDecode(Request.QueryString["d"]);

这在大多数情况下都有效,但有时我们会在日志中发现以下两个异常之一:

[FormatException: Invalid character in a Base-64 string.]
   System.Convert.FromBase64CharArray(Char[] inArray, Int32 offset, Int32 length)
   System.Web.HttpServerUtility.UrlTokenDecode(String input)
   ...

[FormatException: Invalid length for a Base-64 char array.]
   System.Convert.FromBase64CharArray(Char[] inArray, Int32 offset, Int32 length)
   System.Web.HttpServerUtility.UrlTokenDecode(String input)
   System.Web.HttpServerUtilityWrapper.UrlTokenDecode(String input)
   ...

有什么想法会导致这种现象吗?

备注:

  • 生成的 URL
  • 似乎独立于用户代理(IE6、7、8、FF 和 Chrome 有这些例外)
  • 我们的(未经证实的)怀疑包括防病毒产品、HTTP 代理、浏览器插件
  • 找到了this 远程相关的问题,但它是关于视图状态问题

【问题讨论】:

  • 您找到了造成这种现象的原因吗? FromBase64String ?

标签: c# asp.net base64


【解决方案1】:

我们有类似的问题,所以我们避免了 UrlTokenEncode,原因是 base64 有时会将尾随字符填充为 '==' 等等,所以它们不能正确地在 url 中传输。而且我认为 .NET 中存在一个错误,但是我们将其更改为跟随并开始工作。

我们就是这样做的,而且一直有效。

url += "&d=" + HttpServerUtility.UrlEncode( Convert.ToBase64String( ... ))

在接收方,我们只使用

data = Convert.FromBase64String( Request.QueryString["d"] ) 

我们不需要使用 UrlDecode,因为查询字符串对象已经以解码格式存储信息。

【讨论】:

  • 不要使用字符串格式构建 URL 或查询字符串!忘记编码,或者做错,或者添加多个?而不是&等是非常容易和常见的。使用以下解决方案构建查询字符串:stackoverflow.com/a/1877016/2279059使用UriBuilder添加查询字符串到 URL。
【解决方案2】:

UrlTokenDecodeUrlTokenEncode 实际上并不解码/编码 base64url,但无论如何都可以使用它并添加一些内容。此外,还有可能更好也可能不会更好的替代方案。

C#: base64url according to RFC4648

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    相关资源
    最近更新 更多