gpt4 book ai didi

go - G110 : Potential DoS vulnerability via decompression bomb (gosec)

转载 作者:行者123 更新时间:2023-12-04 16:37:44 26 4
gpt4 key购买 nike

我收到以下信息 golintci信息:

testdrive/utils.go:92:16: G110: Potential DoS vulnerability via decompression bomb (gosec)
if _, err := io.Copy(targetFile, fileReader); err != nil {
^
阅读对应的 CWE我不清楚这将如何得到纠正。
请指点迷津。
func unzip(archive, target string) error {
reader, err := zip.OpenReader(archive)
if err != nil {
return err
}

for _, file := range reader.File {
path := filepath.Join(target, file.Name) // nolint: gosec
if file.FileInfo().IsDir() {
if err := os.MkdirAll(path, file.Mode()); err != nil {
return err
}
continue
}

fileReader, err := file.Open()
if err != nil {
return err
}
defer fileReader.Close() // nolint: errcheck

targetFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
if err != nil {
return err
}
defer targetFile.Close() // nolint: errcheck

if _, err := io.Copy(targetFile, fileReader); err != nil {
return err
}
}

return nil
}

最佳答案

您收到的警告来自 gosec 中提供的规则.
该规则专门检测 io.Copy 的使用情况关于文件解压。
这是一个潜在的问题,因为 io.Copy :

copies from src to dst until either EOF is reached on src or an error occurs.


因此,恶意负载可能会导致您的程序意外地解压缩大量数据并耗尽内存,从而导致警告消息中提到的拒绝服务。
特别是,gosec 将检查 ( source ) 程序的 AST 并警告您有关 io.Copy 的使用情况。或 io.CopyBuffer连同以下任何一项:
  • "compress/gzip".NewReader
  • "compress/zlib".NewReaderNewReaderDict
  • "compress/bzip2".NewReader
  • "compress/flate".NewReaderNewReaderDict
  • "compress/lzw".NewReader
  • "archive/tar".NewReader
  • "archive/zip".NewReader
  • "*archive/zip".File.Open

  • 使用 io.CopyN 删除警告,因为(引用)它“将 n 个字节(或直到出现错误)从 src 复制到 dst”,从而让您(程序编写者)控制要复制的字节数。所以你可以传递一个任意大的 n您根据应用程序的可用资源进行设置,或 copy in chunks .

    关于go - G110 : Potential DoS vulnerability via decompression bomb (gosec),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67327323/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com