.NET 4.0框架下的Base64字符转换存在BUG

如果有一个双等号结尾的非法BASE64编码作为参数(如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;
}
不过总觉得哪里有一点不对劲,哈哈~

- 阅读全文 -

【VB.NET】WebBrowser控件增强——WebBrowserExt,拦截所有跳转的URL

.net 默认的WebBrowser控件有时候并不能拦截所有的URL跳转(比如Flash跳转),而本站所提供的 WebBrowserExt 控件则可以拦截所有的跳转事件,并且还可以屏蔽IE内核点击链接时的跳转声。

具体的用法:先复制下面的代码,然后按F5编译运行一次程序,就可以在控件工具栏中找到 WebBrowserExt 控件,拖放或者手动实例化这个控件即可。

新的拦截事件位于 BeforeNavigateBeforeNewWindow 这两个事件中,禁止跳转链接声位于 DisableNavigationSounds 这个属性中!

详细代码:

- 阅读全文 -

一个先进先出、限长数组的流水链表 RunnelList

在.NET中可以用 Queue 类型 来定义一个先进先出的无限制的数据链表,但Queue无法限制内部元素长度,它会在数据超过当前长度时自动增长,并且其内部可调用的方法也比较少,不够强大和灵活。

我写这个类型的目的除了补充Queue的缺陷之外,主要是为了限定数据的长度而设计的。

在某些坏境场景下,可能需要一个先进先出的缓存,或者如同一个流水线一般,较旧的数据需要随着时间的推移而舍去,腾出宝贵的内存空间用以存储新的数据,这时候,RunnelList就可以起到大作用了。

- 阅读全文 -

通过JS拦截 pushState 和 replaceState 事件

history.pushStatehistory.replaceState 可以在不刷新当前页面的情况下更改URL,但是这样就无法获取通过AJAX得到的新页面的内容了。
虽然各种HTML5文档说 window.onpopstate 事件可以拦截 pushState 的消息,但在实际的测试中, onpopstate 根本没有任何作用,无法拦截 pushState 的消息。

经过Google一番,才找到了正确获取 pushState 事件的代码

- 阅读全文 -

动态执行 VB.NET 和 C# 代码

有时候我们需要尝试动态地与一些代码进行交互,而不是只能执行程序内已编死的代码,那该怎么办呢?
我首先推荐各种脚本语言,如Javascript、Lua、Python等等,这些脚本语言有很多优秀的第三方类库,可以很方便的与 .NET 系统集成,让我们的程序中执行动态代码。

但如果你一定想用VB.NET或者C#的代码来运行一段程序,这里就要用到动态编译的功能了。

- 阅读全文 -

【VB.NET】一个全能的哈希校验类 ClsoHash

.NET 内置了许多校验算法,却唯独不支持CRC32。
然而某些程序所生成的校验码是CRC32(比如ZIP、RAR、7Z等压缩格式),所以我们仍需要使用CRC32来校验数据的完整性。

我所分享的这个哈希类不仅有CRC32算法,还拥有许多CRC变种算法,比如CRC64、StrangeCRC、Adler32等等……
当然,也集成了.net本身就拥有的校验算法,全部打包在了一起。
除此之外,我还添加了一些数据加盐、文本转换等实用功能,应该足够一般状况下来使用了。

详细代码如下:

- 阅读全文 -

【vb.net】动态加载内嵌类库文件的方法

有时候我们引用了一个小型的类库文件,但是如果发布程序,就需要带一个类库文件,感觉有点累赘,那该怎么办?
一些第三方的混淆工具自带类库集成,是一个不错的解决办法。
但是如果我只想使用自己的解决方法,那么可以尝试将类库文件以资源嵌入的方式,集成入程序集内!

- 阅读全文 -

用XPath查找HTML节点或元素

虽然JS与JQ都能很方便的查找包含了ID及类名的元素,但在某些情况下,我们需要查找一些不包含类名、ID的元素或节点,就需要用XPath来帮忙了。
XPath虽然是被设计用来搜寻XML文档的,不过它也能很好的在HTML文档中工作,并且大部分浏览器都支持通过XPath来查询节点。

- 阅读全文 -

【VB.NET】利用 LibWebP-NET 解码与编码 WebP 格式图片

WebP 格式是谷歌开发并发展的一种最新的网络图片格式,具有压缩率高、解码快、免版权、开源等优点。
大部分先进的网页浏览器、图片浏览器都支持该格式,Windows用户可以通过安装 WebP Codec for Windows 在系统中查阅WebP图片。

虽然 WebP 是开源格式,但目前 .NET 平台对 WebP 的支持并不好,只能依靠第三方的类库来加载 WebP 格式。
在这里我推荐 LibWebP-NET 这个开源类库,可以在 .NET 中对 WebP 图片进行解码和编码。

LibWebP-NET 只是简单的对于WebP的C++类库的一个.NET封包,其核心代码仍在 libwebp.dll 这个动态链接库文件中,因此不支持在普通的ASP.NET空间中运行。

并且因为动态链接库对于系统的限制,因此有x86和x64两个版本的C++类库文件,应用于不同的操作系统。
我个人推荐您在.NET工程属性的编译选项中,使用x86兼容模式,这样只需要附上x86版的 libwebp.dll 文件即可

下面的测试代码,为我修改版的 LibWebPNET 源码的类库文件,您可以 点击这里下载
我仅将其中快速编码和解码函数设置为静态方法(原版需要实例化相关的解码类,很繁琐)。
使用前,记得引用 Imazen.WebP.dll 类库,并将 libwebp.dll 动态链接库释放到主程序的运行目录

- 阅读全文 -

將頁面轉換爲繁體

Google Translate

公告

欢迎您光临鄙人的小站,虽然没什么太专业的东西,不过如果本站的文章能让您有所收获、或者仅仅是博您一笑,那么也不枉费我建站的辛苦了!

您可以使用邮件订阅来获得邮件更新提醒。

瞎哔哔

    服务器后台更新,已使用了服务商内置的CDN,缓解最近老是断连的问题。

  • 查看更多...

最新文章

随机文章

最近回复

分类

标签