Malheureusement, la seule solution générale à ce problème est de donner à vos utilisateurs le https://
seul et de s'assurer qu'ils s'attendent à ne l'utiliser que. Il est en fin de compte de la responsabilité de l'utilisateur de vérifier qu'il utilise SSL / TLS, comme il s'y attend.
D'autres solutions sont vulnérables aux attaques de l'homme du milieu, même si le site Web n'accepte que les connexions SSL / TLS. Les attaquants pourraient intercepter le trafic vers http://example.com
(comme demandé par l'utilisateur, même s'il example.com
n'écoute même pas sur ce port) et le remplacer en établissant leur propre connexion https://example.com
, en le redirigeant par proxy vers l'utilisateur.
Il y avait une règle OWASP contre les redirections automatiques à cause de cela. Il a été supprimé, probablement parce que les redirections ne sont pas un mauvais moyen d'atténuer le risque (en particulier contre les écoutes clandestines passives), mais ne résolvent pas le problème fondamental.
Il existe différentes techniques que vous pouvez utiliser pour guider l'utilisateur vers le site HTTPS, et ce n'est pas une mauvaise idée de les utiliser (bien que cela ne les protège pas contre les attaquants MITM actifs).
Premièrement, si vous n'avez rien du tout qui devrait être servi en simple HTTP sur le serveur Web, désactivez le port 80 (par exemple, supprimez-le Listen 80
dans la configuration d'Apache Httpd). Les utilisateurs devront utiliser https://
à tout moment, ce qui peut être gênant.
Deuxièmement, dans votre section de configuration Apache Httpd pour un chemin particulier (soit Location
ou Directory
), utilisez la SSLRequireSSL
directive : elle nécessitera l'utilisation de SSL / TLS (même si vous l'avez configuré sur un autre port en fait). D'autres serveurs Web ont probablement des directives similaires.
Troisièmement, vous pouvez utiliser une redirection, en utilisant mod_rewrite
ou dans votre code (s'il s'agit d'une application). Quelque chose comme ça devrait faire, pour un emplacement spécifique ( voir la HTTPS
variable spéciale ; vous pouvez également utiliser 302, mais 301 est mieux si cela doit être plus permanent):
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]
Plus important encore, assurez-vous que tous les liens vers cette section sécurisée sont utilisés https://
. Ne comptez jamais sur la redirection automatique pour faire le travail à votre place. Pour cette raison, je recommande de ne pas l'utiliser du tout pendant la phase de développement .
Cependant, j'ai remarqué que je peux toujours accéder au site Web de manière non sécurisée, c'est-à-dire. en utilisant http
au lieu de https
.
Cela semble également que vous utilisez la même configuration pour les deux http
et https
. Si vous utilisez Apache Httpd, je suggérerais de diviser la configuration en deux VirtualHost
s distincts : un pour le port 80 et un pour le port 443. Ils n'ont pas besoin d'avoir exactement la même configuration: ne mettez pas ce qui est uniquement pour HTTPS dans l'hôte virtuel HTTP du tout.
Un moyen d'atténuer les problèmes mentionnés ci-dessus consiste à utiliser HTTP Strict Transport Security , pour les navigateurs qui le prennent en charge (il s'applique à l'ensemble de l'hôte pour autant que je sache). La toute première connexion peut toujours être exposée si elle https://
n'est pas utilisée sans la redirection, mais il est possible d'avoir une liste préchargée de sites attendus de https://
toute façon (et activée pour HSTS).
https://mail.google.com
. Si, en tant qu'utilisateur, vous voyez que cela fonctionnehttp://mail.google.com
, il y a probablement un MITM qui procède au proxy des demandes à l'authentiquehttps://mail.google.com
. Malheureusement, Gmail ne peut pas faire grand-chose à ce sujet si les utilisateurs eux-mêmes ne vérifient pas. Même principe que dans la vraie vie: si Alice veut parler à Bob, mais parle à Chuck (qui prétend être Bob) à la place sans vérifier l'ID, Bob ne sera pas au courant de cette conversation et ne pourra pas le faire quoi que ce soit à ce sujet. C'est la responsabilité d'Alice.Il vous suffit de rediriger le trafic http vers https - voir cet article 'Rediriger la connexion sécurisée http vers https Apache - forcer les connexions HTTPS' .
Pour un sous-répertoire, placez-le dans un fichier htaccess dans le répertoire lui-même.
la source
Forcer l'accès via HTTPS est en fait possible, en plus d'être une étape nécessaire pour rendre votre site MITM, snooper et PEBKAC-proof. Cela ne devrait pas être la responsabilité de l'utilisateur, cela ne fonctionne pas . Encouragez vos utilisateurs à utiliser des navigateurs sécurisés à la place.
Le forçage HTTPS se fait via HSTS ( HTTP Strict-Transport-Security ). HSTS de base est sécurisé après la première fois que l'utilisateur a accédé à votre site via HTTPS (sur tous les navigateurs pris en charge; IE n'a pas la capacité ). Le HSTS préchargé est toujours sécurisé et couvre les navigateurs modernes à libération rapide (Chrome et dérivés, Firefox).
Pour un aperçu plus complet de la sécurité HTTP (adressage des URL, des redirections, des cookies et du contenu mixte), consultez ce guide de migration HTTPS . HSTS est la dernière étape d'une migration progressive. Vous n'avez pas vraiment besoin de suivre la commande si votre site est flambant neuf.
Normes associées: cookies sécurisés (importants si vos cookies vivent plus longtemps que l'en-tête HSTS), cookies HttpOnly (pendant que vous sécurisez vos cookies), HPKP (pour les navigateurs modernes et les attaquants plus ingénieux).
la source