7
votes

Désactiver HTTP complètement dans Heroku

Nous avons une application NODE.JS Express fonctionnant à Heroku. Il gère l'authentification et doit être très sécurisé.

Nous avons forcé redirect à HTTPS lorsque nous recevons une demande HTTP. Mais cela ne semble pas suffire. Avec des outils tels que SSLStrip, nous pouvons poster via http.

La seule solution à la main semble désactiver complètement le HTTP sur Heroku.

Comment faire ça? Y a-t-il d'autres suggestions?


3 commentaires

Comment avez-vous forcé une redirection?


Nous avons utilisé un package NPM 'Express-Sslify'. Ajouté 'app.use (appliquer.https (vrai));'


@Siliciononlus, vous auriez dû poster ce commentaire comme réponse de votre propre question. C'est totalement valide car il s'agit d'une réponse alternative valide, de sorte que d'autres ne lisent pas les commentaires pouvaient également le voir.


3 Réponses :


6
votes

Selon Owasp, vous ne devez pas rediriger de HTTP sur HTTPS. Voir https://www.owasp.org/index.php/ Transport_layer_protection_cheat_sheet # règle _- supprimé -_ do_not_perform_redrects_from_non-tls_page_to_tls_login_page_to_tls_login_page Pour plus de détails.

Je pense que la meilleure solution serait de rejeter la demande avec un message permettant à l'utilisateur de savoir pourquoi. Vous devriez être capable de le faire dans une fonction middleware. Le code d'état réel que vous revenez est discutable, mais quelque chose comme cela devrait fonctionner: xxx


0 commentaires

1
votes

Vous pouvez tester si une requête utilisée HTTPS, puis forcer une redirection à l'aide de HTTPS si cela est requis (notez la préoccupation indiquée par @RYAN sur la redirection et la sécurité). Avec Heroku, vous pouvez vérifier les en-têtes X-X-FORWARD-PROTO code> code> pour vous assurer qu'il est https. Voici un exemple:

var express = require('express');
var env = process.env.NODE_ENV || 'development';
var forceSSL = function (req, res, next) {
  if (req.headers['x-forwarded-proto'] !== 'https') {
    return res.redirect(['https://', req.get('Host'), req.url].join(''));
  }
  return next();
};

var app = express();
// in your app-level configurations
if (env === 'production') app.use(forceSSL);


0 commentaires

2
votes

Nous avons utilisé package express-sslify NPM. Ajouté xxx


0 commentaires