mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			55 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| 
								 | 
							
								package util
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"fmt"
							 | 
						||
| 
								 | 
							
									"net/url"
							 | 
						||
| 
								 | 
							
									"strings"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const masking = "hidden"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var sensitiveQueryChecks = map[string]func(key string, urlValues url.Values) bool{
							 | 
						||
| 
								 | 
							
									"auth_token": func(key string, urlValues url.Values) bool {
							 | 
						||
| 
								 | 
							
										return true
							 | 
						||
| 
								 | 
							
									},
							 | 
						||
| 
								 | 
							
									"x-amz-signature": func(key string, urlValues url.Values) bool {
							 | 
						||
| 
								 | 
							
										return true
							 | 
						||
| 
								 | 
							
									},
							 | 
						||
| 
								 | 
							
									"x-goog-signature": func(key string, urlValues url.Values) bool {
							 | 
						||
| 
								 | 
							
										return true
							 | 
						||
| 
								 | 
							
									},
							 | 
						||
| 
								 | 
							
									"sig": func(key string, urlValues url.Values) bool {
							 | 
						||
| 
								 | 
							
										for k := range urlValues {
							 | 
						||
| 
								 | 
							
											if strings.ToLower(k) == "sv" {
							 | 
						||
| 
								 | 
							
												return true
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return false
							 | 
						||
| 
								 | 
							
									},
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func SanitizeURI(s string) (string, error) {
							 | 
						||
| 
								 | 
							
									if s == "" {
							 | 
						||
| 
								 | 
							
										return s, nil
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									u, err := url.ParseRequestURI(s)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return "", fmt.Errorf("failed to sanitize URL")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// strip out sensitive query strings
							 | 
						||
| 
								 | 
							
									urlValues := u.Query()
							 | 
						||
| 
								 | 
							
									for key := range urlValues {
							 | 
						||
| 
								 | 
							
										lk := strings.ToLower(key)
							 | 
						||
| 
								 | 
							
										if checker, ok := sensitiveQueryChecks[lk]; ok {
							 | 
						||
| 
								 | 
							
											if checker(key, urlValues) {
							 | 
						||
| 
								 | 
							
												urlValues.Set(key, masking)
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									u.RawQuery = urlValues.Encode()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return u.String(), nil
							 | 
						||
| 
								 | 
							
								}
							 |