Dans le cas d'une application Web, lorsque le protocole HTTPS n'est pas disponible par mesure de sécurité, est-il possible de sécuriser quelque peu la connexion ? Par exemple :
- Tokeniser les logins, pour rendre les attaques répétées difficiles ?
- Comment crypter le mot de passe envoyé à partir d'un champ de mot de passe HTML ?
En particulier, j'utilise CakePHP et un appel POST AJAX pour déclencher l'authentification (incluant le nom d'utilisateur et le mot de passe fournis).
Mise à jour du problème :
- HTTPS n'est pas disponible. Point final. Si vous n'aimez pas la situation, considérez-la comme une question théorique.
- Il n'y a pas d'exigences explicites, vous disposez de tout ce que HTTP, PHP et un navigateur (cookies, JavaScript, etc.) offrent dans la vie réelle (pas de binaires RSA magiques, de plugins PGP).
- La question est, quel est le meilleur, vous pouvez faire à partir de ce c'est mieux que d'envoyer les mots de passe en clair. Connaître les inconvénients de chacune de ces solutions est un plus.
- Toute amélioration meilleure que les mots de passe simples est la bienvenue. Nous ne visons pas une solution 100% l33tG0Dhx0r-proff. Difficile à craquer est mieux que compliqué à pirater, ce qui est mieux qu'un simple reniflage révélant le mot de passe.
9 votes
Quelle sécurité ? Quelle est l'importance des enjeux (un montant approximatif en dollars peut être un guide pratique) ? Quelle est la puissance des attaquants potentiels ? Je n'échangerais pas d'actions ou ne partagerais pas mes secrets les plus sombres sur un site Web dépourvu de SSL :)
2 votes
@mctylr Ce type de sécurité n'est évidemment pas de niveau militaire, financier ou gouvernemental. Mais c'est toujours mieux qu'une connexion en texte brut, ce qui est malheureusement courant pour les petits sites ou les sites qui doivent travailler derrière des pare-feu lourds qui filtrent les HTTPS, ou pour les sites d'hébergement bon marché qui ne fournissent pas de HTTPS (même pas une signature automatique pour une URL différente). La question s'intéresse à tout moyen possible d'augmenter tout aspect de la sécurité.
1 votes
@Michael : Pourquoi essayez-vous de faire valoir que HTTPS est nécessaire. Je sais que HTTPS ne peut pas être complètement imité sur HTTP avec JS/cookies et autres. Il n'y a toujours pas de HTTPS disponible (Voir desciption. "Si vous n'aimez pas la situation, considérez-la comme une question théorique"). Mais aussi, la plupart des hébergements mutualisés sont comme ça. Allez sur n'importe quel forum communautaire ou blog auto hébergé ou la plupart des sites avec moins de 10.000 visiteurs par jour, et vous ne verrez pas de certificat de confiance sur le port 443. Et ils sont encore suffisamment sécurisés ! Pourquoi ne pas ajouter un peu plus à leur sécurité ? Entre-temps, HTTPS n'est pas non plus une solution miracle.
1 votes
L'utilisation de JavaScript pour masquer votre mot de passe constitue toujours une violation de (A3 Broken Authentication and Session Management) owasp.org/images/0/0f/OWASP_T10_-_2010_rc1.pdf C'est une lecture courte et très instructive, et c'est mon dernier point dans cet argument.
1 votes
@sibidiba J'espère que le fait que presque tout le monde sur SO n'est pas d'accord avec vous répond à votre question.
2 votes
@The Rook : les faits et les scénarios, tout comme les exigences, ne sont pas démocratiques.
3 votes
comment votre application se défend-elle contre des attaques comme firesheep ou comment fait-elle face à OWASP A9 ?
1 votes
Je ne sais pas. Peut-être que mon application ne se défend pas contre FooBarMagicHack9000. Mais la question porte néanmoins sur le fait de ne pas disposer de HTTPS et sur ce que vous faites dans ce scénario particulier pour rendre les choses plus difficiles à craquer. SSL n'est pas non plus une solution miracle.
1 votes
@sibidiba github est maintenant entièrement https grâce à firesheep, facebook et twitter vont bientôt suivre. Firesheep n'est pas nouveau, mais il attire l'attention sur l'OWASP A9. Le problème le plus récent avec https est apparu avec sslstrip, mais il est facile de s'en défendre, il suffit d'activer le drapeau STS. De plus, votre réponse a un -4 car elle ne fait rien.
1 votes
Qu'en est-il du SSL implémenté par JS ? Je viens de le découvrir : www-cs-students.stanford.edu/~tjw/jsbn
2 votes
Si vous exécutez du code sur un canal non sécurisé, cela ne peut pas être sécurisé, point final. Même si vous pouviez envoyer du code qui établit un canal sécurisé, cela n'aurait aucune importance, car l'intercepteur peut simplement remplacer ce code par le sien. Vous devriez plutôt vous demander comment obscurcir ce qui se passe afin de retarder l'attaquant et l'empêcher de vous posséder.
4 votes
Je recommande vivement de changer la réponse à cette question à quelqu'un d'autre, ou de la laisser sans réponse. La réponse actuelle est terrifiante.
1 votes
Je pense que la question doit être clarifiée. Ou bien les personnes qui y répondent doivent relire la question. Le PO veut seulement sécuriser la connexion, pas le protocole entier. Il n'y a peut-être pas besoin d'un jeton de session. Peut-être que le PO veut seulement POST des données en association avec un login comme un processus en une étape, etc.
2 votes
@sibidiba J'ai mis à jour ma réponse pour fournir une vraie solution. S'il vous plaît, changez la réponse de ce post à toute autre personne. La sécurité est ma profession, et c'est une question sérieuse qui nécessite une réponse sérieuse.
1 votes
Vous ne pouvez pas simuler HTTPS en utilisant PHP. Il existe de nombreuses options pour rendre votre connexion plus sûre, mais si HTTPS n'est pas disponible, vous n'avez pas de chance.
1 votes
La réponse courte : Vous avez besoin de HTTPS pour avoir une authentification sécurisée. C'est gratuit, pourquoi ne pas l'utiliser ?
2 votes
Pourquoi pensez-vous que HTTPS n'est pas une option ? Les hôtes partagés fournissent très bien TLS de nos jours.
0 votes
Je comprends votre frustration face aux réponses qui ne correspondent pas à vos critères. Pour une solution non-HTTPS, veuillez accepter Réponse de SLaks à la place. La réponse actuellement acceptée encourage le hachage direct du mot de passe à l'aide de MD5, ce qui n'est pas très efficace. beaucoup moins sûr (contre les observateurs passifs dans le style de Firesheep) que la suggestion de SLaks d'utiliser RSA ou AES. C'est une bien meilleure façon de tirer le meilleur parti de la situation :)
1 votes
@sibidiba Pourriez-vous reconsidérer l'acceptation de la réponse d'ESL ? Elle est insipide et contient de mauvais conseils de sécurité. Vous ne pouvez pas obtenir la sécurité par le hachage MD5, et "c'est mieux que rien" est incorrect : un MitM peut modifier le JS pour ajouter le texte en clair aux requêtes HTTP et capturer les mots de passe de cette façon.
0 votes
@sibidiba Votre question est formulée comme suit :
For a webapplication, when HTTPS is not available as a security measure, is it possible to still make the login somewhat secure?
. La réponse est "non". Que votre comme ce fait ou non, n'est pas pertinent. la réponse de rook est la seule réponse correcte à votre question, telle que posée.