将回调 URL 放入 URL 的查询字符串中是否安全?

Is it secure to put a callback URL in a URL's query string?

我正在开发 ASP.NET MVC5 网络应用程序。假设用户的会话超时,他们必须转到登录屏幕再次进行身份验证,然后被重定向回他们来自的 URL。将 return(回调)URL 放在登录 URL 的查询字符串中是一种好习惯吗?

有人知道这方面的 PCI 合规性吗?我记得参加过 PCI 培训,他们提到了回调 URLs,但我不记得这是否符合合规性。如果没有,在 ASP.NET MVC 中是否有更安全的方式来传递回调 URL?我目前没有使用任何 Auth/Auth 库,只是使用 cookie 管理手动完成所有身份验证...

提前致谢!

与任何其他代码一样,它可以符合或不符合 PCI,具体取决于是否正确/安全地实施。

例如:

private ActionResult RedirectReturnUrl(string returnUrl)
{
    return Redirect(returnUrl);
}

如果您使用上述代码重定向到查询字符串中的 returnUrl,您将容易受到 open redirection attacks.

但是,如果您确保 returnUrl 是当前 host:

的本地文件,则可以使此 安全
private ActionResult RedirectToLocal(string returnUrl)
{
   if (Url.IsLocalUrl(returnUrl))
   {
     return Redirect(returnUrl);
   }

   return RedirectToAction("Index", "Home");
}

有关详细信息,请参阅 this