有人能告诉我如何在这一行验证这个URL吗?
return Redirect(returnUrl);
因为这从安全扫描工具中给我一个安全错误“URL重定向不受信任的站点”
答案 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并查看应用程序是否重定向到它。这应该是正确的,但如果没有关于安全扫描如何工作的更多信息,我无法保证。