簡體   English   中英

如何處理 gosec linter 警告:可能通過變量包含文件

[英]How to handle gosec linter warning: Potential file inclusion via variable

如何解決來自gosec linter的以下警告:

::warning: Potential file inclusion via variable,MEDIUM,HIGH (gosec)

linter 在此函數的第一行警告我:

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

我曾嘗試閱讀有關本地文件包含的內容,但看不到它在此處的適用性。

路徑從何而來? 如果您不確定它永遠不會有用戶輸入,最好在使用前清理它並使用已知前綴,例如:

filePath = filepath.Join(basePath,filepath.Clean(filePath))
f, err := os.Open(filePath)

那應該解決投訴。 無論如何,這是一個合理的預防措施,即使您現在認為它是安全的,以防以后有人將您的功能與用戶數據一起使用。

沒有人說 linter 很聰明 孤立地看功能,不可能說是否存在安全問題。 如果使用用戶提供filePath充分驗證的文件路徑調用該函數,並且它在可以讀取用戶無法以其他方式讀取的文件的上下文中運行(例如,在具有提升權限的程序中,或在遠程服務器上),可能存在問題。 否則,對警告唯一要做的就是抑制或忽略它。

如果使用變量指定文件路徑,則可能會指定非預期的文件路徑。 因此,您應該使用filepath.Clean()來清理可能的錯誤路徑。

一個簡單的解決方案:

f,err := os.Open(filepath.Clean(fname))

如何解決來自gosec linter的以下警告:

::warning: Potential file inclusion via variable,MEDIUM,HIGH (gosec)

linter 在這個函數的第一行警告我:

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

我曾嘗試閱讀本地文件包含,但不知道這將如何適用於這里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM