internal/oauthex: address URL attacks in PRM (#539)

Fix Protected Resource Metadata to prevent URL attacks, as described in
the issue.

For #526
This commit is contained in:
Jonathan Amsterdam 2025-09-30 07:33:59 -04:00 • committed by GitHub
commit fd0dc9d741
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -65,3 +65,21 @@ func getJSON[T any](ctx context.Context, c *http.Client, url string, limit int64
}
return &t, nil
}
// checkURLScheme ensures that its argument is a valid URL with a scheme
// that prevents XSS attacks.
// See #526.
func checkURLScheme(u string) error {
if u == "" {
return nil
}
uu, err := url.Parse(u)
if err != nil {
return err
}
scheme := strings.ToLower(uu.Scheme)
if scheme == "javascript" || scheme == "data" || scheme == "vbscript" {
return fmt.Errorf("URL has disallowed scheme %q", scheme)
}
return nil
}