yusuketk 6 лет назад
Родитель
Сommit
1f16e07ab6
2 измененных файлов с 9 добавлено и 3 удалено
  1. 1 1
      src/server/routes/login-passport.js
  2. 8 2
      src/server/routes/login.js

+ 1 - 1
src/server/routes/login-passport.js

@@ -32,12 +32,12 @@ module.exports = function(crowi, app) {
         if (redirectUrl.hostname === req.hostname) {
           return res.redirect(redirectUrl);
         }
-        return res.redirect('/');
       }
       catch (e) {
         return res.redirect('/');
       }
     }
+
     return res.redirect('/');
   };
 

+ 8 - 2
src/server/routes/login.js

@@ -39,8 +39,14 @@ module.exports = function(crowi, app) {
       req.session.jumpTo = null;
 
       // prevention from open redirect
-      if (!jumpTo.match(/^\/\/.+$/)) {
-        return res.redirect(jumpTo);
+      try {
+        const redirectUrl = new URL(jumpTo, `${req.protocol}://${req.get('host')}`);
+        if (redirectUrl.hostname === req.hostname) {
+          return res.redirect(redirectUrl);
+        }
+      }
+      catch (e) {
+        return res.redirect('/');
       }
     }