Go語言 通過檔案流判斷檔案頭來識別檔案型別

2022-07-17 06:51:12 字數 1610 閱讀 1865

系統中需要用到檔案上傳的功能,但是從系統安全的角度上來說需要判斷上傳檔案的格式,防止將病毒木馬等有害的檔案上傳到伺服器上。

這個方法簡單容易,但是也是最容易被欺騙的方法,修改檔案的字尾名即可實現欺騙系統。

這個是通過判斷檔案的mime型別進行判斷,我們在通過form表單上傳檔案時,在上傳的request域裡面會獲取當前檔案的mime型別,我們可以通過控制接收檔案的mime型別進行判斷。這個方法如果通過抓包的形式進行修改型別也不安全。

安全問題詳解:

注意:現在遇見乙個問題就是在angular框架下通過consumes引數進行控制上傳檔案型別時,當錯誤型別時會產生415(不被允許的多**型別),但是正確型別時,會產生error_connection_reset連線重定向錯誤。(待解決)

package utils

import (

"bytes"

"encoding/hex"

"strconv"

"strings"

"sync"

)var filetypemap sync.map

func init()

// 獲取前面結果位元組的二進位制

func bytestohexstring(src byte) string

if src == nil || len(src) <= 0

temp := make(byte, 0)

for _, v := range src

res.writestring(hv)

} return res.string()

}// 用檔案前面幾個位元組來判斷

// fsrc: 檔案位元組流(就用前面幾個位元組)

func getfiletype(fsrc byte) string ) bool

return true

}) return filetype

}

測試:

func testgetfiletype(t *testing.t) 

fsrc, err := ioutil.readall(f)

t.log(getfiletype(fsrc[:10]))

}

結果:

d:\goworks\src\server\web\backend\src\utils>go test -v

=== run testgetfiletype

--- pass: testgetfiletype (0.00s)

regexp_test.go:39: html

pass

ok server/web/backend/src/utils 0.547s

d:\goworks\src\server\web\backend\src\utils>go test -v

=== run testgetfiletype

--- pass: testgetfiletype (0.07s)

regexp_test.go:40: wmv

pass

ok server/web/backend/src/utils 0.480s

python通過檔案頭判斷檔案型別

對於提供上傳的伺服器,需要對上傳的檔案進行過濾。分享 如下 import struct 支援檔案型別 用16進製制字串的目的是可以知道檔案頭是多少位元組 各種檔案頭的長度不一樣,少半2字元,長則8字元 def typelist return 位元組碼轉16進製制字串 def bytes2hex by...

php通過檔案頭判斷格式的方法

fun程式設計客棧ction judgefile file,form if is array form else elseelse else 補充 小編在這裡推薦一款本站的php格式化美化的排版工具幫助大家在以後的php程式設計中進行 排版 php 格式化美化工具 另外,由於php屬於c語言風格,因...

java 校驗檔案頭 判斷虛假檔案

下面方法 bytestohexstring 獲取檔案頭轉化為16進製制陣列 mp4檔案頭恰好是00000020 檔案流寫入到檔案 param inputstream param file return public void inputstreamtofile inputstream ins,fil...