fix: 收紧 GUI 安全边界
This commit is contained in:
+21
-5
@@ -171,7 +171,7 @@ network.
|
||||
return fmt.Errorf("failed to make password: %w", err)
|
||||
}
|
||||
opt.Auth.BasicPass = randomPass
|
||||
fs.Infof(nil, "No password specified. Using random password: %s", randomPass)
|
||||
fs.Infof(nil, "No password specified. Using random password for this session")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,10 +200,13 @@ network.
|
||||
fs.Logf(nil, "Serving GUI %s on %s", guiSource, guiURL)
|
||||
|
||||
// Build the launch URL: always pass ?url=<rcURL> so the SPA can
|
||||
// discover the RC base; embed user/pass only when auth is on.
|
||||
// discover the RC base.
|
||||
loginURL := buildLoginURL(guiURL, rcURL, opt.Auth.BasicUser, opt.Auth.BasicPass, opt.NoAuth)
|
||||
|
||||
fs.Logf(nil, "GUI available at %s", loginURL)
|
||||
fs.Logf(nil, "GUI available at %s", safeLoginURL(loginURL))
|
||||
if !opt.NoAuth {
|
||||
fs.Logf(nil, "GUI authentication user: %s", opt.Auth.BasicUser)
|
||||
}
|
||||
if !noOpenBrowser {
|
||||
if err := open.Start(loginURL); err != nil {
|
||||
fs.Errorf(nil, "failed to open GUI in browser: %v", err)
|
||||
@@ -287,8 +290,9 @@ func guiHandler(srcFS iofs.FS) http.Handler {
|
||||
|
||||
// buildLoginURL constructs the URL the browser should open. The query
|
||||
// string always carries the RC API base URL so the SPA can find it.
|
||||
// When auth is enabled, user/pass and a /login hash are added so the
|
||||
// SPA can present credentials to the cross-port RC server.
|
||||
// When auth is enabled, user/pass and a /login hash are added so the SPA can
|
||||
// present credentials to the cross-port RC server, then remove them from the
|
||||
// visible address bar on load.
|
||||
func buildLoginURL(guiBaseURL, rcURL, user, pass string, noAuth bool) string {
|
||||
u, err := url.Parse(guiBaseURL)
|
||||
if err != nil {
|
||||
@@ -308,3 +312,15 @@ func buildLoginURL(guiBaseURL, rcURL, user, pass string, noAuth bool) string {
|
||||
u.RawQuery = q.Encode()
|
||||
return u.String()
|
||||
}
|
||||
|
||||
func safeLoginURL(loginURL string) string {
|
||||
u, err := url.Parse(loginURL)
|
||||
if err != nil {
|
||||
return loginURL
|
||||
}
|
||||
q := u.Query()
|
||||
q.Del("user")
|
||||
q.Del("pass")
|
||||
u.RawQuery = q.Encode()
|
||||
return u.String()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user