URL重定向不受信任的站点

时间:2014-11-21 09:32:04

标签: asp.net-mvc validation

有人能告诉我如何在这一行验证这个URL吗?

return Redirect(returnUrl);

因为这从安全扫描工具中给我一个安全错误“URL重定向不受信任的站点”

1 个答案:

答案 0 :(得分:2)

您只需在执行重定向之前测试该网址是本地网址,因为格式错误的网址可能会将您的用户重定向到其他网站(例如网上诱骗网站)。正如您的代码所示,此URL:

http://www.yoursite.com/account/login?returnUrl=www.myfakesite.com
一旦您登录

会将您重定向到www.myfakesite.com

通过在下面添加此条件检查,您可以确保永远不会在当前应用程序之外重定向

if(!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl)){
    //check for empty return url and that it is a local url 
    return Redirect(returnUrl);
}
else{
     //wherever you want people to default going to if they 
     //log in without a return url or one that is not a local url.
     return RedirectToAction("action", "controller");
}

修改

Url帮助程序集位于System.Web.Mvc中。但是,在控制器中,UrlHelper已经设置好并准备就绪 - 这意味着控制器会自动实例化UrlHelper"。要在控制器外部使用此功能,您需要访问当前RequestContext才能设置UrlHelper。

   var helper = new UrlHelper(HttpContext.Current.Request.RequestContext);
   return helper.IsLocalUrl("testUrl");

注意 - 我不知道安全扫描软件如何确定这可能是一个" URL重定向不受信任的网站" - 但它可能只是发送一个坏URL并查看应用程序是否重定向到它。这应该是正确的,但如果没有关于安全扫描如何工作的更多信息,我无法保证。