RedirectUrl问题

时间:2015-07-16 17:34:22

标签: c# asp.net

我试图阻止用户使用RedirectUrl访问其他网站,除非网站网址在我的数据库表RedirectLinksTable中。

  

规则:

     
      
  1. 如果我的数据库表RedirectUrl中存在该网址,则用户可以使用RedirectLinksTable并导航到新网页。

  2.   
  3. 如果我的数据库表中不存在该网址,则会加载我的landing page

  4.   

当前结果:如果用户使用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 }))

0 个答案:

没有答案