fix: safeReturn для всех редиректов (security)
- ui/routes/auth.js: safeReturn() для returnTo в POST /login и /login-token - src/routes/oidc.js: safeLocal() для oidcReturnTo в /callback
This commit is contained in:
+12
-1
@@ -88,7 +88,7 @@ function createRouter({ auth, doubleCsrfProtection, generateCsrfToken, authLimit
|
||||
};
|
||||
}
|
||||
|
||||
const returnTo = req.session.oidcReturnTo || '/';
|
||||
const returnTo = safeLocal(req.session.oidcReturnTo) || '/';
|
||||
delete req.session.oidcReturnTo;
|
||||
res.redirect(returnTo);
|
||||
} catch (e) {
|
||||
@@ -109,4 +109,15 @@ function createRouter({ auth, doubleCsrfProtection, generateCsrfToken, authLimit
|
||||
return router;
|
||||
}
|
||||
|
||||
/**
|
||||
* Валидирует redirect-цель: разрешает только локальные пути.
|
||||
* Защита от open redirect: //evil.com и https://evil.com → '/'.
|
||||
*/
|
||||
function safeLocal(target) {
|
||||
if (typeof target === 'string' && target.startsWith('/') && !target.startsWith('//')) {
|
||||
return target;
|
||||
}
|
||||
return '/';
|
||||
}
|
||||
|
||||
module.exports = { createRouter };
|
||||
|
||||
Reference in New Issue
Block a user