webentwicklung-frage-antwort-db.com.de

HTTPS-Umleitung für alle Routen node.js/express - Sicherheitsbedenken

Ich habe kürzlich versucht, HTTPS auf einem Node/Express-Server einzurichten. Es ist mir gelungen, alle Routen mithilfe des folgenden Codes zur Verwendung von https umzuleiten:

// force https redirect
var https_redirect = function(req, res, next) {
  if (req.secure) {
    if(env === 'development') {
      return res.redirect('https://localhost:3000' + req.url);
    } else {
      return res.redirect('https://' + req.headers.Host + req.url);
    }
  } else {
    return next();
  }
};

app.get('*', function(req, res, next) {
  https_redirect(req, res, next);
});

Dies scheint gut zu funktionieren. Da ich mich jedoch nicht damit befasst habe, bevor ich ein paar Fragen habe:

  1. Ist dies der ideale Weg, um von http zu https umzuleiten?
  2. Wenn ein Benutzer die http-Route verwendet, kann jeder Benutzer vor der Umleitung so etwas wie sslstrip verwenden, um Sitzungsinformationen ausfindig zu machen.

knoten: v0.8.2; Express: v3.05

17
los7world
function requireHTTPS(req, res, next) {
    if (!req.secure) {
        //FYI this should work for local development as well
        return res.redirect('https://' + req.get('Host') + req.url);
    }
    next();
}

app.use(requireHTTPS);
app.get('/', routeHandlerHome);

Der Middleware-Ansatz funktioniert, da Express die Middleware in der Reihenfolge ausführt, in der sie hinzugefügt wurde, bevor sie den Router ausführt. Im Allgemeinen ist diese Art der standortweiten Richtlinie sauberer als Middleware im Vergleich zu einer Wildcard-Route.

In Bezug auf Frage 2 zu Sniffing-Sitzungscookies muss dies behoben werden, indem die Cookies beim Setzen als secure markiert werden. Wenn sie nicht als sicher markiert wurden, überträgt der Browser sie auch mit HTTP-Anfragen und setzt sie so dem Schnüffeln aus.

42
Peter Lyons

Sie können einfach Ihre https_redirect-Funktion (wenn auch etwas modifiziert) verwenden, um alle Ihre sicheren Anfragen automatisch umzuleiten:

// force https redirect
var https_redirect = function () {
  return function(req, res, next) {
    if (req.secure) {
      if(env === 'development') {
        return res.redirect('https://localhost:3000' + req.url);
      } else {
        return res.redirect('https://' + req.headers.Host + req.url);
      }
    } else {
      return next();
    }
  };
};
app.use(https_redirect());

app.get('/', routeHandlerHome);
1
red

Ich verwende diesen einfachen Code, um Anforderungen umzuleiten, je nachdem, ob sich die Anwendung in der Entwicklung oder in der Produktion befindet.

// force https redirect
var forceHTTPS = function () {
  return function(req, res, next) {
    if (!req.secure) {
      if (app.get('env') === 'development') {
         return res.redirect('https://localhost:3001' + req.url);
      } else {
        return res.redirect('https://' + req.headers.Host + req.url);
      }
    } else {
      return next();
    }
  };
};
0
davejoem