347 votes

Détecter HTTP ou HTTPS puis forcer HTTPS en JavaScript

Existe-t-il un moyen de détecter HTTP ou HTTPS et de forcer l'utilisation de HTTPS avec JavaScript ?

J'ai quelques codes pour détecter le HTTP ou HTTPS mais je ne peux pas le forcer à utiliser https: .

J'utilise le protocole.de.localisation.de.la.fenêtre pour définir ce que le site est https: puis rafraîchir la page pour espérer recharger une nouvelle URL https'ed dans le navigateur.

if (window.location.protocol != "https:") {
   window.location.protocol = "https:";
   window.location.reload();
}

20 votes

Ceci est géré de manière beaucoup plus fiable (et efficace) côté serveur.

3 votes

Je pense que vous avez raison. En tant qu'attaquant utilisant une attaque MITM, je pourrais simplement supprimer ce code. Il n'offre donc qu'une protection contre les attaques passives.

0 votes

571voto

Soumya Points 3113

Essayez ceci

if (location.protocol !== 'https:') {
    location.replace(`https:${location.href.substring(location.protocol.length)}`);
}

location.href = blah ajoute cette redirection à l'historique du navigateur. Si l'utilisateur appuie sur le bouton "retour", il sera redirigé vers la même page. Il est préférable d'utiliser location.replace car il n'ajoute pas cette redirection à l'historique du navigateur.

3 votes

Pourquoi window et non document ?

5 votes

11 votes

La comparaison des chaînes de caractères doit-elle être !== ?

68voto

sam Points 1960

Le paramétrage de location.protocol permet de naviguer vers une nouvelle URL . Il n'est pas nécessaire d'analyser ou de découper quoi que ce soit.

if (location.protocol !== "https:") {
  location.protocol = "https:";
}

Firefox 49 dispose d'une bug donde https fonctionne mais https: ne le fait pas. Il est dit corrigé dans Firefox 54 .

2 votes

if window.location.href.match('http:') window.location.href = window.location.href.replace('http', 'https') fonctionne sur les derniers FF et Chrome.

2 votes

location.protocol = "https"; semble fonctionner dans firefox 28

1 votes

Merde, ça casse le bouton arrière. Utilisez location.replace à la place.

25voto

b1- Points 1119

Ce n'est pas une bonne idée parce que tu viens temporaire redirige l'utilisateur vers https et le navigateur n'enregistre pas cette redirection.

Vous décrivez la tâche pour le serveur web (apache, nginx etc.) http 301, http 302

3 votes

D'accord. Forcer le serveur à utiliser https est bien plus fiable.

3 votes

Je pourrais l'utiliser si la préservation de la valeur de hachage est importante. Elle n'est pas envoyée au serveur et certains navigateurs ne la préservent pas.

0 votes

Voici un lien pour configurer le site Web Azure pour https uniquement ... blogs.msdn.com/b/benjaminperkins/archive/2014/01/07/

16voto

misterkeg Points 935

Que pensez-vous de ça ?

if (window.location.protocol !== 'https:') {
    window.location = 'https://' + window.location.hostname + window.location.pathname + window.location.hash;
}

L'idéal serait de le faire du côté du serveur.

1 votes

Il manque le port

0 votes

Et la chaîne de recherche / requête également

16voto

Steven Penny Points 18523
if (location.protocol == 'http:')
  location.href = location.href.replace(/^http:/, 'https:')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X