登录后重定向到未转义 URL 的安全隐患

Security implications of redirecting to an unescaped URL after login

我们是否需要取消转义我们从用户应用程序接受的 URL 以重定向到(比如登录成功,如本问题)?否则它们是否存在任何安全漏洞?

更长的问题(代码审查):-

在我的网络应用程序(使用 passportjs)上实现 facebook 登录时,我遇到了一个小型中间件函数的以下实现,它在会话中设置 return URL。

function checkReturnTo(req, res, next) {
  var returnTo = req.query['returnTo'];
  if (returnTo) {
    req.session.returnTo = querystring.unescape(returnTo);
  }
  next();
}

如果我不对上面的 'returnTo' url 进行转义怎么办?

req.session.returnTo = returnTo;

代码在这两种情况下都能正常工作。我尝试 google,但无法通过重定向 URL 找到任何特定的漏洞。我认为这是一个很好的问题。

确实有security issues with unrestricted redirects after login,但是转义和不转义URL与它们无关。

一般来说,如果您的框架已经正确提取和转义 URL 参数,则无需再次转义它们(当然,除非生成登录 URL 的代码冗余出于某种原因双重转义重定向 URL)。但是,我对您使用的框架并不特别熟悉,因此我无法确定是否出于某种奇怪的原因需要这里。