mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
Strip CORS headers from applications (#8057)
The problem is that the headers get doubled up (not overwritten) and browsers do not like multiple values for the allowed origin even though it appears the spec allows for it. We could prefer the application's headers instead of ours but since we control OPTIONS I think preferring ours will by the more consistent experience and also aligns with the original RFC.
This commit is contained in:
@@ -22,6 +22,7 @@ import (
|
||||
"github.com/coder/coder/coderd/httpapi"
|
||||
"github.com/coder/coder/coderd/httpmw"
|
||||
"github.com/coder/coder/coderd/tracing"
|
||||
"github.com/coder/coder/coderd/util/slice"
|
||||
"github.com/coder/coder/coderd/wsconncache"
|
||||
"github.com/coder/coder/codersdk"
|
||||
"github.com/coder/coder/site"
|
||||
@@ -541,6 +542,26 @@ func (s *Server) proxyWorkspaceApp(rw http.ResponseWriter, r *http.Request, appT
|
||||
defer release()
|
||||
proxy.Transport = conn.HTTPTransport()
|
||||
|
||||
proxy.ModifyResponse = func(r *http.Response) error {
|
||||
r.Header.Del(httpmw.AccessControlAllowOriginHeader)
|
||||
r.Header.Del(httpmw.AccessControlAllowCredentialsHeader)
|
||||
r.Header.Del(httpmw.AccessControlAllowMethodsHeader)
|
||||
r.Header.Del(httpmw.AccessControlAllowHeadersHeader)
|
||||
varies := r.Header.Values(httpmw.VaryHeader)
|
||||
r.Header.Del(httpmw.VaryHeader)
|
||||
forbiddenVary := []string{
|
||||
httpmw.OriginHeader,
|
||||
httpmw.AccessControlRequestMethodsHeader,
|
||||
httpmw.AccessControlRequestHeadersHeader,
|
||||
}
|
||||
for _, value := range varies {
|
||||
if !slice.ContainsCompare(forbiddenVary, value, strings.EqualFold) {
|
||||
r.Header.Add(httpmw.VaryHeader, value)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// This strips the session token from a workspace app request.
|
||||
cookieHeaders := r.Header.Values("Cookie")[:]
|
||||
r.Header.Del("Cookie")
|
||||
|
||||
Reference in New Issue
Block a user