feat(security): #273 filter sec-fetch
All checks were successful
Build Docker Image / Build-Docker-Image (push) Successful in 37s
Build and Push Docker Image / Build-And-Push-Docker-Image (push) Successful in 43s

This commit was merged in pull request #275.
This commit is contained in:
2024-11-23 21:20:40 +01:00
committed by Tim Wundenberg
parent 6a36eb0580
commit b1af29633a
2 changed files with 30 additions and 0 deletions

View File

@@ -38,6 +38,7 @@ func GetHandler(d *sql.DB, serverSettings *types.ServerSettings) http.Handler {
return middleware.Wrapper( return middleware.Wrapper(
router, router,
middleware.Log, middleware.Log,
middleware.SecFetchFilter,
middleware.ContentSecurityPolicy, middleware.ContentSecurityPolicy,
middleware.Cors(serverSettings), middleware.Cors(serverSettings),
middleware.Corp, middleware.Corp,

View File

@@ -0,0 +1,29 @@
package middleware
import "net/http"
func SecFetchFilter(next http.Handler) http.Handler {
// A map is slower than a slice, but it's easier to check if a value exists
allowedSites := map[string]interface{}{
"same-origin": nil,
"none": nil,
}
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
secFetchSite := r.Header.Get("Sec-Fetch-Site")
if secFetchSite == "" {
next.ServeHTTP(w, r)
return
}
_, exists := allowedSites[r.Header.Get("Sec-Fetch-Site")]
if !exists {
next.ServeHTTP(w, r)
return
}
w.WriteHeader(http.StatusForbidden)
})
}