什么是防止开放重定向攻击的最佳方法.目前我正在开发asp.net网站.我想确保在成功登录后不将用户重定向到外部链接?
编辑:是否可以在不更改现有代码的情况下实施解决方案?
解决方法
我假设你正在使用
login control.
您应该检查ReturnUrl参数是否是本地URL(而不是指向不同域的那个). loggedin event将是一个做这样的事情的好地方:
您应该检查ReturnUrl参数是否是本地URL(而不是指向不同域的那个). loggedin event将是一个做这样的事情的好地方:
void OnLoggedIn(object sender,EventArgs e) { string returnto = Request.QueryString["ReturnUrl"]; if (returnto != "" and isLocalUrl(returnto)) Response.Redirect(returnto); }
在哪里可以使用给定here的IsLocalUrl的定义
private bool IsLocalUrl(string url) { if (string.IsNullOrEmpty(url)) { return false; } Uri absoluteUri; if (Uri.TryCreate(url,UriKind.Absolute,out absoluteUri)) { return String.Equals(this.Request.Url.Host,absoluteUri.Host,StringComparison.OrdinalIgnoreCase); } else { bool isLocal = !url.StartsWith("http:",StringComparison.OrdinalIgnoreCase) && !url.StartsWith("https:",StringComparison.OrdinalIgnoreCase) && Uri.IsWellFormedUriString(url,UriKind.Relative); return isLocal; } }