第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

檢查文件是否位于基本目錄中的最安全方法是什么?

檢查文件是否位于基本目錄中的最安全方法是什么?

Go
泛舟湖上清波郎朗 2022-05-23 16:27:22
Go 在任何平臺(tái)上驗(yàn)證給定文件路徑是否位于基本路徑中的最安全和最安全的方法是什么?路徑最初以字符串形式提供并使用“/”作為分隔符,但它們是用戶提供的,我需要假設(shè)大量惡意輸入。我應(yīng)該執(zhí)行哪種路徑規(guī)范化以確保評(píng)估諸如“..”之類的序列,以便我可以安全地檢查基本路徑?在各種文件系統(tǒng)和平臺(tái)上需要注意哪些例外情況?在這方面,哪些 Go 庫(kù)應(yīng)該是安全的?結(jié)果將被提供給外部函數(shù),例如os.Create,sqlite3.Open并且任何未能識(shí)別出基本路徑被留下將是安全違規(guī)。
查看完整描述

1 回答

?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

我相信你可以使用filepath.Rel它(并檢查它是否返回一個(gè)不以 開頭的值..)。

Rel 返回一個(gè)在詞法上等效于 targpath 的相對(duì)路徑,當(dāng)它通過(guò)中間分隔符連接到 basepath 時(shí)。也就是說(shuō),Join(basepath, Rel(basepath, targpath)) 等價(jià)于 targpath 本身。成功時(shí),返回的路徑將始終相對(duì)于 basepath,即使 basepath 和 targpath 不共享任何元素。如果 targpath 不能相對(duì)于 basepath 或者如果需要知道當(dāng)前工作目錄來(lái)計(jì)算它,則會(huì)返回錯(cuò)誤。Rel 根據(jù)結(jié)果調(diào)用 Clean。

filepath.Rel還調(diào)用filepath.Clean其輸入路徑,解析任何.s 和..s。

Clean 通過(guò)純?cè)~法處理返回與 path 等效的最短路徑名。它迭代地應(yīng)用以下規(guī)則,直到無(wú)法進(jìn)行進(jìn)一步處理:

  1. 將多個(gè)分隔符元素替換為一個(gè)。

  2. 消除每一個(gè)。路徑名元素(當(dāng)前目錄)。

  3. 消除每個(gè)內(nèi)部 .. 路徑名元素(父目錄)以及它之前的非 .. 元素。

  4. 消除以根路徑開頭的 .. 元素:即,假設(shè) Separator 為 '/',將路徑開頭的“/..”替換為“/”。

您也可以filepath.Clean直接使用并在完成后檢查前綴。以下是一些示例輸出filepath.Clean

ps := []string{

    "/a/../b",

    "/a/b/./c/../../d",

    "/b",

}

for _, p := range ps {

    fmt.Println(p, filepath.Clean(p))

}

印刷:


/a/../b /b

/a/b/./c/../../d /a/d

/b /b

也就是說(shuō),路徑操作不應(yīng)該是您部署的唯一安全機(jī)制。如果您真的擔(dān)心漏洞利用,請(qǐng)通過(guò)沙盒、創(chuàng)建虛擬文件系統(tǒng)/容器等來(lái)使用深度防御。


查看完整回答
反對(duì) 回復(fù) 2022-05-23
  • 1 回答
  • 0 關(guān)注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)