我已經開始使用新的Asp.Net身份與Owin一個新的MVC 5站點。在我的具有[授權]屬性的「帳戶」控制器中,我有相當標準的操作;如何重定向到returnUrl在Asp.Net中工作MVC5
// GET: /User/Login
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
// POST: /User/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
try
{
if (ModelState.IsValid)
{
var userApi = new UserService();
var apiUser = await userApi.LogIn(UserManager, model.CardNumber, model.Pin, model.RememberMe);
if (apiUser != null)
{
await SignInAsync(apiUser, model.RememberMe);
if (string.IsNullOrEmpty(returnUrl))
{
return RedirectToAction("UserLoggedIn", "User");
}
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
}
catch (Exception ex)
{
Trace.TraceError("Cannot login {0}", ex.ToString());
Response.AppendToLog(ex.ToString());
ModelState.AddModelError("", ex.ToString());
}
// If we got this far, something failed, redisplay form
return View(model);
}
我的問題是關於在RETURNURL行爲,上面的代碼在這個意義上的作品,如果用戶沒有登錄並調用具有屬性[授權]控制器的作用,它會發送到上面的登錄操作,然後返回到請求的控制器/操作。這是偉大的,但如何?它安全嗎?
在本文中,關於「Preventing open redirect attacks」(針對早期版本的Asp.Net MVC),建議在執行重定向之前檢查returnUrl是否是本地url,是我應該做的還是它現在由框架處理?
乾杯, 奧拉
你有它不處理的信息任何來源?看起來很奇怪,他們會自動將功能重定向到returnUrl,但不遵循自己的指導原則。因此原來的問題。 –
爲什麼不嘗試操縱returnUrl並查看會發生什麼?順便說一句,在你的代碼中,'returnUrl'參數是從不使用的。 – Marthijn
是的,我想這將是一個選項。我知道returnUrl從來沒有用在我的動作中,但網站仍然正確地重定向,這就是爲什麼我想知道它是如何工作,魔術或只是發生了一些事情排隊?還是他們已經添加了自動支持那東西? –