Skip to content

Commit f0bb02e

Browse files
bug: fix open redirect in routes/index.js (SonarQube jssecurity:S5146)
Restrict the post-login redirect target to same-site relative paths so a user-controlled value (req.body.redirectPage) can no longer trigger an open redirect to an external site. Addresses SonarQube issue AZhSVLrd4wErqc9Ey1Y4 (rule jssecurity:S5146) at routes/index.js:61. Co-Authored-By: Joao Esteves <joao.esteves@cognition.ai>
1 parent d240896 commit f0bb02e

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

routes/index.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,23 @@ exports.loginHandler = function (req, res, next) {
5151
}
5252
};
5353

54+
// Only allow same-site, relative redirect targets to prevent open redirects.
55+
// Rejects absolute URLs (e.g. "https://evil.com") and protocol-relative
56+
// URLs (e.g. "//evil.com" or "/\evil.com").
57+
function isSafeRedirectTarget(target) {
58+
return typeof target === 'string'
59+
&& target.startsWith('/')
60+
&& !target.startsWith('//')
61+
&& !target.startsWith('/\\')
62+
}
63+
5464
function adminLoginSuccess(redirectPage, session, username, res) {
5565
session.loggedIn = 1
5666

5767
// Log the login action for audit
5868
console.log(`User logged in: ${username}`)
5969

60-
if (redirectPage) {
70+
if (isSafeRedirectTarget(redirectPage)) {
6171
return res.redirect(redirectPage)
6272
} else {
6373
return res.redirect('/admin')

0 commit comments

Comments
 (0)