Don't Unescape redirect_to cookie value (#6399)
redirect_to holds a value that we want to redirect back to after login. This value can be a path with intentonally escaped values and we should not unescape it. Fixes #4475
This commit is contained in:
		
							parent
							
								
									6d345e00e6
								
							
						
					
					
						commit
						6f2e1bd23a
					
				| @ -9,7 +9,6 @@ import ( | |||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"net/url" |  | ||||||
| 	"strings" | 	"strings" | ||||||
| 
 | 
 | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
| @ -96,7 +95,7 @@ func checkAutoLogin(ctx *context.Context) bool { | |||||||
| 	if len(redirectTo) > 0 { | 	if len(redirectTo) > 0 { | ||||||
| 		ctx.SetCookie("redirect_to", redirectTo, 0, setting.AppSubURL, "", setting.SessionConfig.Secure, true) | 		ctx.SetCookie("redirect_to", redirectTo, 0, setting.AppSubURL, "", setting.SessionConfig.Secure, true) | ||||||
| 	} else { | 	} else { | ||||||
| 		redirectTo, _ = url.QueryUnescape(ctx.GetCookie("redirect_to")) | 		redirectTo = ctx.GetCookie("redirect_to") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if isSucceed { | 	if isSucceed { | ||||||
| @ -496,7 +495,7 @@ func handleSignInFull(ctx *context.Context, u *models.User, remember bool, obeyR | |||||||
| 		return setting.AppSubURL + "/" | 		return setting.AppSubURL + "/" | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 && !util.IsExternalURL(redirectTo) { | 	if redirectTo := ctx.GetCookie("redirect_to"); len(redirectTo) > 0 && !util.IsExternalURL(redirectTo) { | ||||||
| 		ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL, "", setting.SessionConfig.Secure, true) | 		ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL, "", setting.SessionConfig.Secure, true) | ||||||
| 		if obeyRedirect { | 		if obeyRedirect { | ||||||
| 			ctx.RedirectToFirst(redirectTo) | 			ctx.RedirectToFirst(redirectTo) | ||||||
| @ -587,7 +586,7 @@ func handleOAuth2SignIn(u *models.User, gothUser goth.User, ctx *context.Context | |||||||
| 				return | 				return | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 { | 			if redirectTo := ctx.GetCookie("redirect_to"); len(redirectTo) > 0 { | ||||||
| 				ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL, "", setting.SessionConfig.Secure, true) | 				ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL, "", setting.SessionConfig.Secure, true) | ||||||
| 				ctx.RedirectToFirst(redirectTo) | 				ctx.RedirectToFirst(redirectTo) | ||||||
| 				return | 				return | ||||||
| @ -1298,7 +1297,7 @@ func MustChangePasswordPost(ctx *context.Context, cpt *captcha.Captcha, form aut | |||||||
| 
 | 
 | ||||||
| 	log.Trace("User updated password: %s", u.Name) | 	log.Trace("User updated password: %s", u.Name) | ||||||
| 
 | 
 | ||||||
| 	if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 && !util.IsExternalURL(redirectTo) { | 	if redirectTo := ctx.GetCookie("redirect_to"); len(redirectTo) > 0 && !util.IsExternalURL(redirectTo) { | ||||||
| 		ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL) | 		ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL) | ||||||
| 		ctx.RedirectToFirst(redirectTo) | 		ctx.RedirectToFirst(redirectTo) | ||||||
| 		return | 		return | ||||||
|  | |||||||
| @ -47,7 +47,7 @@ func SignInOpenID(ctx *context.Context) { | |||||||
| 	if len(redirectTo) > 0 { | 	if len(redirectTo) > 0 { | ||||||
| 		ctx.SetCookie("redirect_to", redirectTo, 0, setting.AppSubURL, "", setting.SessionConfig.Secure, true) | 		ctx.SetCookie("redirect_to", redirectTo, 0, setting.AppSubURL, "", setting.SessionConfig.Secure, true) | ||||||
| 	} else { | 	} else { | ||||||
| 		redirectTo, _ = url.QueryUnescape(ctx.GetCookie("redirect_to")) | 		redirectTo = ctx.GetCookie("redirect_to") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if isSucceed { | 	if isSucceed { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user