.NET 4.0框架下的Base64字符转换存在BUG
如果有一个双等号结尾的非法BASE64编码作为参数(如
详细资料请参考 https://detunized.net/posts/2019-03-06-base64-decoding-bug-that-is-present-in-all-version-of-.net/
经过我个人的测试,我发现这个BUG仅影响 4.0 以上的版本,反而 2.0~3.5 可以正确发现参数异常,并予以报错。
另外据说最新的 .NET Core 也已经修复了这个BUG,所以请使用 4.0 作为开发框架的童鞋们“注意安全”。
原文给出了一个 .NET 4.7.2 的内部解决方法
abc==
),.NET的 Convert.FromBase64String 函数不仅不会报错,反而还会产生一个意料之外的返回值,对后续程序的执行是一个隐患。详细资料请参考 https://detunized.net/posts/2019-03-06-base64-decoding-bug-that-is-present-in-all-version-of-.net/
经过我个人的测试,我发现这个BUG仅影响 4.0 以上的版本,反而 2.0~3.5 可以正确发现参数异常,并予以报错。
另外据说最新的 .NET Core 也已经修复了这个BUG,所以请使用 4.0 作为开发框架的童鞋们“注意安全”。
原文给出了一个 .NET 4.7.2 的内部解决方法
// This only works for base64 without spaces or linebreaks.
string Repad(string base64)
{
var l = base64.Length;
return l % 4 == 1 && base64[l - 1] == '='
? base64.Substring(0, l - 1)
: base64;
}
不过总觉得哪里有一点不对劲,哈哈~本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。