Files
SamWaf/utils/http_check.go
T
2025-03-25 09:59:21 +08:00

49 lines
1.5 KiB
Go

package utils
import (
"net/http"
"strings"
)
// IsStaticAssist 是否是静态资源
func IsStaticAssist(res *http.Response, contentType string) bool {
var allowedSortFields = []string{"application/javascript", "text/css", "image/jpeg",
"image/png", "image/gif", "image/x-icon", "text/js"}
for _, allowedField := range allowedSortFields {
if strings.Contains(contentType, allowedField) {
return true
}
}
// 检查请求的Accept头,判断是否为资源类型请求
if res.Request != nil {
acceptHeader := res.Request.Header.Get("Accept")
if acceptHeader != "" {
// 检查Accept头是否主要请求图片或其他资源类型
isResourceRequest := strings.Contains(acceptHeader, "image/") ||
strings.Contains(acceptHeader, "font/") ||
strings.Contains(acceptHeader, "audio/") ||
strings.Contains(acceptHeader, "video/")
return isResourceRequest
}
// 检查Sec-Fetch-Dest头,这是一个更明确的指示
secFetchDest := res.Request.Header.Get("Sec-Fetch-Dest")
if secFetchDest == "image" || secFetchDest == "font" ||
secFetchDest == "audio" || secFetchDest == "video" ||
secFetchDest == "style" {
return true
}
}
//如果检测资源后发现还存在,那么进行判断处理
var textFields = []string{"application/json", "text/xml", "application/xml",
"text/plain", "text/html", "text/csv", "application/html"}
for _, textField := range textFields {
if strings.Contains(contentType, textField) {
return false
}
}
return false
}