Secure Go  - A project devoted to secure programming in the Go language,

gosec   - Golang Security Checker为go语言安全编码的github,其默认提供了如下规则。在扫描过程中,我们针对部分中签的规则,找到了一些安全编码的解决办法。


  • 万能解决办法

如果gosec报告已手动验证为安全的,则可以使用如下“#nosec”来注释代码。扫描的时候可通过参数指定忽略该注释代码。个人不建议使用此方法,毕竟代码合规最重要。

import "md5" // #nosec  func main(){/* #nosec */if x > y {h := md5.New() // this will also be ignored}
}// 以上是不建议使用的。
// 如果使用,你需要执行命令来运行扫描程序以及忽略#nosec注释:$ gosec -nosec=true ./...

  • G101: Look for hard coded credentials
  • G102: Bind to all interfaces
  • G103: Audit the use of unsafe block
  • G104: Audit errors not checked

反例:

json.Unmarshal(b, &xxxx) // warning: Errors unhandled.

解决办法:handle error

 err := json.Unmarshal(b, &xxxx) // or : _ = json.Unmarshal(b, &xxxx) if err != nil {return errors.Wrap(err, "Unmarshal xxxx failed, jsonStr")}
  • G105: Audit the use of math/big.Int.Exp
  • G106: Audit the use of ssh.InsecureIgnoreHostKey
  • G107: Url provided to HTTP request as taint input
  • G201: SQL query construction using format string

反例:

fmt.Sprintf("INSERT INTO %s (%s) VALUES (%s)",schema.Name, head, value)  // warnning

解决办法:把大写的WHERE、INSERT INTO等(sql语句关键字:SELECT FROM、 WHERE、 INSERT INTO、 UPDATE、 DELETE FROM)改成小写where、insert into

fmt.Sprintf("insert into %s (%s) values (%s)",schema.Name, head, value)
  • G202: SQL query construction using string concatenation
  • G203: Use of unescaped data in HTML templates
  • G204: Audit use of command execution

反例:

out, err := exec.Command("docker","run", "-d", "--net=host", "--entrypoint=/usr/local/bin/h2load", "gohttp2/curl")...).Output()  // Subprocess launched with variableif err != nil {t.Skipf("Failed to run h2load in docker: %v, %s", err, out)}

解决办法:将后面的参数使用append([]string{}, args...)

out, err := exec.Command("docker", append([]string{"run", "-d", "--net=host", "--entrypoint=/usr/local/bin/h2load", "gohttp2/curl"}, args...)...).Output()if err != nil {t.Skipf("Failed to run h2load in docker: %v, %s", err, out)}
  • G301: Poor file permissions used when creating a directory

  • G302: Poor file permissions used with chmod

反例:

os.OpenFile(logName, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0664) // Expect file permissions to be 0600 or less

解决办法:降低权限,如果必须要0664,可以将0664改为0600|0064

os.OpenFile(logName, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0600|0064)
  • G303: Creating tempfile using a predictable path

  • G304: File path provided as taint input

反例:

func File2lines(filePath string) ([]string, error) {f, err := os.Open(filePath) //Warning hereif err != nil {return nil, err}defer f.Close()return linesFromReader(f)
}

解决办法:将路径/文件参数用path.Clean()或filepath.Clean()进行校验,注意必须in line

func File2lines(filePath string) ([]string, error) {f, err := os.Open(filepath.Clean(filePath)) //check file pathif err != nil {return nil, err}defer f.Close()return linesFromReader(f)
}
  • G305: File traversal when extracting zip archive
  • G401: Detect the usage of DES, RC4, MD5 or SHA1
  • G402: Look for bad TLS connection settings

  • G403: Ensure minimum RSA key length of 2048 bits
  • G404: Insecure random number source (rand)
  • G501: Import blacklist: crypto/md5

  • G502: Import blacklist: crypto/des

  • G503: Import blacklist: crypto/rc4

  • G504: Import blacklist: net/http/cgi

  • G505: Import blacklist: crypto/sha1

反例:

import ("crypto/des""crypto/md5""crypto/rc4"
)

解决办法:升级加密算法。否则使用“#nosec”来注释代码。安全备案。

【Golang安全编码】gosec常见规则的解决办法相关推荐

  1. Android 常见异常及解决办法

    Ø  前言 本文主要记录 Android 的常见异常及解决办法,以备以后遇到相同问题时可以快速解决. 1.   java.lang.NullPointerException: Attempt to i ...

  2. VS2019运行OpenGL时出现的常见错误及解决办法

    OpenGL程序在低版本的VS中运行成功,但在VS2019中运行却出现各种错误,以下是常见错误的解决办法.(文章结尾有库的链接哟~) 问题一:无法打开文件"glaux.lib" 解 ...

  3. VLOOKUP常见错误及解决办法

    35-VLOOKUP常见错误及解决办法 2021-08-18 13:11 VLOOKUP是一个非常实用的查找函数,但在实际使用过程中,往往会出现这样那种的错误而得到不正确的结果. [这里备注下,如果你 ...

  4. 金蝶专业版过账提示运行时错误5_金蝶专业版过账提示运行时错误5_金蝶KIS专业版常见故障及解决办法...

    金蝶KIS专业版常见故障及解决办法 金蝶KIS专业版常见故障有哪些你知道吗?你对金蝶KIS专业版常见故障了解吗?你知道如何解决金蝶KIS专业版常见故障吗?下面是yjbys小编为大家带来的关于金蝶KIS ...

  5. php源码安装失败,php编译安装常见错误及解决办法

    php编译安装常见错误及解决办法 1.configure: error: No curses/termcap library found 网上有的说法是:–with-named-curses-libs ...

  6. 得力计算机无法开机,得力碎纸机维修常见故障及解决办法分享

    碎纸机中,得力品牌的我们也是没少见了,得力碎纸机近几年也是得到大家的认可.所有东西用久了都会出现故障,所以今天小编整理了得力碎纸机维修常见故障及解决办法,供大家参考~ 得力碎纸机维修常见故障及解决办法 ...

  7. 错误651dns服务器未响应,网络常见错误代码及解决办法.doc

    网络常见错误代码及解决办法,678错误代码解决办法,错误代码651解决办法,769错误代码解决办法,691错误代码解决办法,宽带常见错误代码,http常见错误代码,常见错误代码,宽带连接常见错误代码, ...

  8. MATLAB等号错误为啥,Matlab常见错误及解决办法归纳

    Matlab常见错误及解决办法归纳 1.Subscript indices must either be real positive integers or logicals 中文解释:下标索引必须是 ...

  9. 创建与使用DLL项目常见错误和解决办法

    前面讲原理有点啰嗦,如果直接看创建和使用DLL,直接跳转到[DLL项目创建]. DLL 在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件, ...

最新文章

  1. 解决阿里云无法正常使用samba的问题【转】
  2. swagger 返回json字符串_Net Core微服务入门全纪录(完结)——Ocelot与Swagger
  3. 安装MySQL时出现黄色感叹号,提示3306已被占用
  4. RedHat7/Centos7 搭建NFS服务器
  5. 基于深度学习的多目标跟踪算法(上):端到端的数据关联
  6. Hadoop常见异常
  7. 云原生 - Istio可观察性之分布式跟踪(三)
  8. Linux:chmod命令-修改文件或目录的权限
  9. 关于一些html和css2的知识点
  10. 语言中根号打法_知识的诅咒,数学老师在教学中不得不防的陷阱
  11. Python第三方库使用感言
  12. 紫书 习题 8-2 UVa 1610 (暴力出奇迹)
  13. java给xyz大小排序_Java Collection - 002 排序
  14. 知识点收录04:MAVEN相关的知识点
  15. python生成pdf报告模块_python生成pdf报告、python实现html转换为pdf报告
  16. 计算机会计学ufo报表,UFO报表管理实验报告.doc
  17. 光纤传输与网络技术习题整理
  18. iOS模拟器录屏视频
  19. Python数据预处理--Gensim构建语料词典
  20. 冰点文库的替代品【Wenku Doc Downloader】用于下载各种文库的材料

热门文章

  1. apache Alias用法
  2. 2013 China Hadoop Summit杂记
  3. 获取千牛聊天记录(此方法新版千牛已失效,7.1之前的版本应该有效,各位自行测试咯)...
  4. Vue3的优点,为什么要使用Vue3
  5. Html的a标签onclick属性,关于通过js给a标签增加onclick属性
  6. 创客匠人5月产品升级,功能更新(上)
  7. 基于上市公司财务数据造假案例(Python实现)
  8. java技术--数据库where条件
  9. KeyError: ‘passes columns are not ALL present dataframe‘
  10. 内存查找工具CE游戏辅助开发必备