我只需要在公共域内进行安全重定向。因此,例如,以下内容有效:example.localhttp://blog.example.local,而以下内容无效:http://www.example.local/dashboardhttp://blog.example.local

var url = require('url');

app.post('/login', function (req, res, next) {
    var redirect = req.query.redirect,
        targetUrl = url.parse(redirect);

   if (targetUrl.host !== 'example.local') {
      return next(new Error('Open redirect attack detected'));
   }

   return res.redirect(redirect);
});

它是否足够安全,可以在生产中使用,或者我应该修复一些东西?

最佳答案

从代码中,如果targetUrl = 'http://blog.example.local',则应用程序将返回错误“检测到打开重定向攻击”,因为targeturl.host将是“blog.example.local”
请把代码改一下

var expectedHost = [
  'blog.example.local',
  'example.local'
];

if (expectedHost.indexOf(targetUrl.host) === -1) {
  return next(new Error('Open redirect attack detected'));
}

那一切都会好起来的。

关于node.js - 使用url.parse检查redirectURL是否仅在域内是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38086865/

10-16 05:46