gosec

https://github.com/securego/gosec
go get github.com/securego/gosec/v2/cmd/gosec


Run a specific set of rules


$ gosec -include=G101,G203,G401 ./…



Run everything except for rule G303


$ gosec -exclude=G303 ./…

可用规则



G101:查找硬编码凭证



G102:绑定到所有接口



G103:审计不安全区块的使用



G104:审计错误未检查



G105:审计math/big.Int.Exp的使用



G106:审计ssh.InsecureIgnoreHostKey的使用



G201:SQL查询构造使用格式字符串



G202:SQL查询构造使用字符串连接



G203:在HTML模板中使用未转义的数据



G204:审计命令执行情况



G301:创建目录时文件权限分配不合理



G302:chmod文件权限分配不合理



G303:使用可预测的路径创建临时文件



G304:作为污点输入提供的文件路径



G305:提取zip存档时遍历文件



G401:检测DES,RC4或MD5的使用情况



G402:查找错误的TLS连接设置



G403:确保最小RSA密钥长度为2048位



G404:不安全的随机数源(rand)



G501:导入黑名单列表:crypto/md5



G502:导入黑名单列表:crypto/des



G503:导入黑名单列表:crypto/rc4



G504:导入黑名单列表:net/http/cgi



注释代码
与所有自动检测工具一样,gosec也会出现误报的情况。如果gosec报告已手动验证为安全的,则可以使用“#nosec”来注释代码。



注释将导致gosec停止处理AST中的任何其他节点,因此可以应用于整个块或应用于单个表达式中。



import “md5” // #nosec



func main(){



/* #nosec */
if x > y {
h := md5.New() // this will also be ignored
}


}
在某些情况下,你可能还需要重新访问已使用#nosec注释的位置。那么你可以执行以下命令来运行扫描程序以及忽略#nosec注释:



$ gosec -nosec=true ./…



build标签
gosec能够将Go构建标签传递给分析器。它们可以以逗号分隔的列表提供,如下所示:



$ gosec -tag debug,ignore ./…
输出格式
gosec目前支持text,json,yaml,csv和JUnit XML的输出格式。默认情况下,结果将以stdout(标准输出)。但我们也可以使用 ‘-fmt’参数指定输出格式,以及’-out’来指定输出文件。



Write output in json format to results.json


$ gosec -fmt=json -out=results.json *.go
开发
按照此处的说明安装dep:https://github.com/golang/dep



安装最新版本的golint:https://github.com/golang/lint



https://studygolang.com/articles/14146



https://zhuanlan.zhihu.com/p/261663439



Category golang