我只需要在公共域内进行安全重定向。因此,例如,以下内容有效:example.local
,http://blog.example.local
,而以下内容无效:http://www.example.local/dashboard
http://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/