A proxied KVM may be framed by the console that proxies it
frame-ancestors 'none' forbids framing even from the same origin, so /kvm/ paths say 'self' instead. Without this the iframe was refused before it loaded. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
fd88c4ff78
commit
823c72122c
+10
-3
@@ -321,9 +321,16 @@ func sensorPath(p string) bool {
|
|||||||
func (s *Server) Handler() http.Handler {
|
func (s *Server) Handler() http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
h := w.Header()
|
h := w.Header()
|
||||||
// The console must never be framed. An embedded widget exists to be: it is a page
|
// The console must never be framed. Two exceptions: an embedded widget exists to be
|
||||||
// that can only read sensors, and only with a read-only token in its URL.
|
// (a page that can only read sensors, and only with a read-only token in its URL),
|
||||||
if r.URL.Path != "/embed/widget" {
|
// and a proxied KVM is framed by the console itself — 'none' forbids that even from
|
||||||
|
// the same origin, so those paths say 'self' instead of opening up.
|
||||||
|
switch {
|
||||||
|
case r.URL.Path == "/embed/widget":
|
||||||
|
case strings.HasPrefix(r.URL.Path, kvmPrefix):
|
||||||
|
h.Set("X-Frame-Options", "SAMEORIGIN")
|
||||||
|
h.Set("Content-Security-Policy", "frame-ancestors 'self'")
|
||||||
|
default:
|
||||||
h.Set("X-Frame-Options", "DENY")
|
h.Set("X-Frame-Options", "DENY")
|
||||||
h.Set("Content-Security-Policy", "frame-ancestors 'none'")
|
h.Set("Content-Security-Policy", "frame-ancestors 'none'")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user