我试图阻止用户使用RedirectUrl
访问其他网站,除非网站网址在我的数据库表RedirectLinksTable
中。
规则:
如果我的数据库表
RedirectUrl
中存在该网址,则用户可以使用RedirectLinksTable
并导航到新网页。- 醇>
如果我的数据库表中不存在该网址,则会加载我的
landing page
。
当前结果:如果用户使用RedirectUrl
传递了网址,则会加载目标网页。当用户传入我的数据库表中存在的Url时,会出现此问题。代码没有意识到它可以使用RedirectUrl
并将用户发送到该特定网站。
RedirectUrl
的使用方法如下:localhost/ProjectName/Login?RedirectUrl=http://www.websitename.com
检查网址是否在RedirectLinksTable
public ApiResponse<Status, bool> IsRedirectInDatabase(string url)
{
if (url == null)
return new ApiResponse<Status, bool>(Status.Success, false);
if(!Uri.IsWellFormedUriString(url, UriKind.Absolute))
return new ApiResponse<Status, bool>(Status.InvalidData, false);
// Additional code here that doesn't affect the Redirect Issue....
}
数据库表定义
RedirectLinksTable
- Id
- RedirectUrl
我的
IsRedirectInDatabase
方法出了什么问题?
修正
经过进一步研究,我发现我的错误是我的用户界面。我有一个使用以下代码行的方法:
原始
return new RedirectResult(urlHelper.Action("Index", "Login", new { RedirectURL = HttpContext.Page.Request.Url }))
我将其更改为
您会注意到我必须使用IsAbsoluteUri
到我的退货声明
return new RedirectResult(urlHelper.Action("Index", "Login", new { RedirectURL = HttpContext.Page.Request.Url.IsAbsoluteUri }))