Bezbednost: _next whitelist umesto url.Parse (CodeQL taint analiza)
This commit is contained in:
@@ -7,7 +7,6 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
@@ -264,13 +263,14 @@ func (h *Handler) SacuvajPodesavanja(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// whitelist dozvoljenih redirekcija — vrednost uvek dolazi iz mape, nikad od korisnika
|
||||||
|
dozvoljeniSledeci := map[string]string{
|
||||||
|
"/admin/podesavanja/opste": "/admin/podesavanja/opste",
|
||||||
|
"/podesavanja": "/podesavanja",
|
||||||
|
}
|
||||||
sledeci := "/podesavanja"
|
sledeci := "/podesavanja"
|
||||||
if next := r.FormValue("_next"); next != "" {
|
if v, ok := dozvoljeniSledeci[r.FormValue("_next")]; ok {
|
||||||
if u, err := url.Parse(next); err == nil && u.Host == "" && u.Scheme == "" {
|
sledeci = v
|
||||||
if p := u.RequestURI(); p != "" {
|
|
||||||
sledeci = p
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// backup podešavanja — pri neispravnom unosu javljamo jasnu grešku
|
// backup podešavanja — pri neispravnom unosu javljamo jasnu grešku
|
||||||
|
|||||||
Reference in New Issue
Block a user