Golang 如何限制木马图片上传服务器的实例

 更新时间:2022年02月20日 16:50:43   作者:Data-Mining  
本文主要介绍了Golang 如何限制木马图片上传服务器的实例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

项目背景

自己开发了一个云对象存储服务,用于存储某个项目中所有的文件资源。

问题

在进行安全测试时,自己遇到了一个问题:无法限制木马病毒模拟的图片文件进行上传。看似是一个图片后缀的文件,其实是一个木马脚本。比如图片文件:muma.jpeg,我们使用 UltraEdit 编辑器打开这个文件,文件内容如下图所示:

然而,一个正常的 jpeg 图片文件的内容如下图所示:

解决

那么如何解决这个问题呢?毫无疑问,我们要做的就是区分正真的图片和木马图片。

经过我一顿猛如虎的调研,终于找到了解决办法,那就利用 Golang 语言的标准库 —— image。

但是,有一个问题,image 库并没有支持所有图片类型的校验,目前仅支持 jpeg、gif、png 三种图片格式。我们封装一个方法,同时支持三种图片格式的真实性校验。

参考代码如下:

func CheckImageFile(path, style string) (string, error) {
	f, err := os.Open(path)
	if err != nil {
		fmt.Errorf("打开文件失败 %s", err.Error())
	}
	switch strings.ToUpper(style) {
	case "JPG", "JPEG":
		_, err = jpeg.Decode(f)
	case "PNG":
		_, err = png.Decode(f)
	case "GIF":
		_, err = gif.Decode(f)
	}
	if err != nil {
		fmt.Errorf("校验文件类型失败 %s", err.Error())
		return "", err
	}
	return "", nil
}

调用上述方法时,只需要传入图片路径和后缀类型,就可以校验文件的真实性。非常方便,本人已经验证通过。

到此这篇关于Golang 如何限制木马图片上传服务器的实例的文章就介绍到这了,更多相关Golang 限制木马图片上传 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang中Channel实战技巧与一些说明

    Golang中Channel实战技巧与一些说明

    channel是Go语言内建的first-class类型,也是Go语言与众不同的特性之一,下面这篇文章主要给大家介绍了关于Golang中Channel实战技巧与一些说明的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • Go错误和异常CGO fallthrough处理教程详解

    Go错误和异常CGO fallthrough处理教程详解

    这篇文章主要为大家介绍了Go错误和异常CGO fallthrough使用教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 深入探究Go语言从反射到元编程的实践与探讨

    深入探究Go语言从反射到元编程的实践与探讨

    反射和元编程是一些高级编程概念,它们使开发者能够在运行时检查、修改并控制程序的行为,了解反射和元编程的工作方式可以帮助我们更好地理解Go,以及如何在需要的时候高效地使用它们,文章中介绍的非常详细,感兴趣的同学可以参考下
    2023-05-05
  • go使用Gin框架利用阿里云实现短信验证码功能

    go使用Gin框架利用阿里云实现短信验证码功能

    这篇文章主要介绍了go使用Gin框架利用阿里云实现短信验证码,使用json配置文件及配置文件解析,编写路由controller层,本文通过代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • 图解Golang的GC垃圾回收算法

    图解Golang的GC垃圾回收算法

    这篇文章主要介绍了图解Golang的GC垃圾回收算法,详细的介绍了三种经典的算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • Go语言LeetCode题解937重新排列日志文件

    Go语言LeetCode题解937重新排列日志文件

    这篇文章主要为大家介绍了Go语言LeetCode题解937重新排列日志文件,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • go语言中time包的各种函数总结

    go语言中time包的各种函数总结

    时间和日期是我们编程中经常会用到的,下面这篇文章主要给大家介绍了关于go语言中time包的各种函数总结的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Go整合captcha实现验证码功能

    Go整合captcha实现验证码功能

    最近在使用Go语言搞一个用户登录&注册的功能,我们油然会产生一种增加验证码的想法。后来在GitHub上找到了这个名叫captcha的插件,于是就利用文档进行了初步的学习,并融入到自己的项目中,整个过程下来感觉这个插件的设计非常巧妙
    2023-03-03
  • Windows下升级go版本过程详解

    Windows下升级go版本过程详解

    这篇文章主要为大家介绍了Windows下升级go版本过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Go学习笔记之map的声明和初始化

    Go学习笔记之map的声明和初始化

    map底层是由哈希表实现的,Go使用链地址法来解决键冲突,下面这篇文章主要给大家介绍了关于Go学习笔记之map的声明和初始化的相关资料,需要的朋友可以参考下
    2022-11-11

最新评论