Il y a environ 6 mois, j'ai déployé un site où chaque demande devait être sur https. Le seul moyen à l'époque que je pouvais trouver pour m'assurer que chaque demande à une page était sur https était de le vérifier dans l'événement de chargement de page. Si la demande n'était pas terminée sur http, je répondrais.redirect (" https://example.com ")
Y a-t-il un meilleur moyen - idéalement un paramètre dans le web.config?
Réponses:
Veuillez utiliser HSTS (HTTP Strict Transport Security)
depuis http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx
Réponse originale (remplacée par ce qui précède le 4 décembre 2015)
fondamentalement
qui irait dans le global.asax.cs (ou global.asax.vb)
je ne connais pas de moyen de le spécifier dans le web.config
la source
L'autre chose que vous pouvez faire est d'utiliser HSTS en renvoyant l'en-tête "Strict-Transport-Security" au navigateur. Le navigateur doit prendre en charge cela (et à l'heure actuelle, ce sont principalement Chrome et Firefox qui le font), mais cela signifie qu'une fois défini, le navigateur ne fera pas de requêtes au site via HTTP et les traduira à la place en requêtes HTTPS avant de les émettre. . Essayez ceci en combinaison avec une redirection de HTTP:
Les navigateurs qui ne sont pas conscients de HSTS ignoreront simplement l'en-tête mais seront toujours capturés par l'instruction switch et envoyés à HTTPS.
la source
if(!Request.IsLocal)
afin qu'il n'interrompe pas le débogage.Le module IIS7 vous permettra de rediriger.
la source
Pour ceux qui utilisent ASP.NET MVC. Vous pouvez utiliser ce qui suit pour forcer SSL / TLS sur HTTPS sur l'ensemble du site de deux manières:
À la dure
1 - Ajoutez le RequireHttpsAttribute aux filtres globaux:
2 - Forcer les jetons Anti-Forgery à utiliser SSL / TLS:
3 - Exiger que les cookies requièrent HTTPS par défaut en modifiant le fichier Web.config:
4 - Utilisez le package NuGet NWebSec.Owin et ajoutez la ligne de code suivante pour activer Strict Transport Security sur le site. N'oubliez pas d'ajouter la directive Preload ci-dessous et soumettez votre site au site HSTS Preload . Plus d'informations ici et ici . Notez que si vous n'utilisez pas OWIN, il existe une méthode Web.config que vous pouvez consulter sur le site NWebSec .
5 - Utilisez le package NuGet NWebSec.Owin et ajoutez la ligne de code suivante pour activer l'épinglage par clé publique (HPKP) sur le site. Plus d'informations ici et ici .
6 - Incluez le schéma https dans toutes les URL utilisées. L' en-tête HTTP de la politique de sécurité du contenu (CSP) et l' intégrité des sous-ressources (SRI) ne fonctionnent pas bien lorsque vous imitez le schéma dans certains navigateurs. Il vaut mieux être explicite sur HTTPS. par exemple
La manière facile
Utilisez le modèle de projet ASP.NET MVC Boilerplate Visual Studio pour générer un projet avec tout cela et bien plus encore intégré. Vous pouvez également afficher le code sur GitHub .
la source
<authentication mode="Forms">
, à l'intérieur, vous devez avoir<forms requireSSL="true">
RequireHttpsAttribute
fait la redirection. Tant que vous l'avez, ça devrait aller.Si vous ne parvenez pas à configurer cela dans IIS pour une raison quelconque, je créerais un module HTTP qui effectue la redirection pour vous:
Ensuite, compilez-le simplement dans une DLL, ajoutez-le comme référence à votre projet et placez-le dans web.config:
la source
app.BeginRequest += new OnBeginRequest;
dans laInit
méthode et dans leOnBeginRequest
contiendrait ce que contient laInit
méthode actuelle . Êtes-vous sûr que ce module fonctionne comme prévu?Ce que vous devez faire est:
1) Ajoutez une clé à l'intérieur de web.config, en fonction du serveur de production ou de scène comme ci-dessous
2) Dans votre fichier Global.asax, ajoutez la méthode ci-dessous.
la source
Si le support SSL n'est pas configurable dans votre site (par exemple, devrait pouvoir activer / désactiver https) - vous pouvez utiliser l'attribut [RequireHttps] sur toute action de contrôleur / contrôleur que vous souhaitez sécuriser.
la source
Cela dépend également de la marque de votre équilibreur, pour le multiplexeur Web, vous devrez rechercher l'en-tête http
X-WebMux-SSL-termination: true
pour déterminer que le trafic entrant était SSL. détails ici: http://www.cainetworks.com/support/redirect2ssl.htmlla source
Pour @Joe ci-dessus, "Cela me donne une boucle de redirection. Avant d'ajouter le code, cela fonctionnait bien. Des suggestions? - Joe 8 novembre 11 à 4:13"
Cela m'arrivait également et je crois qu'il se passait un équilibreur de charge mettant fin à la requête SSL devant le serveur Web. Ainsi, mon site Web pensait toujours que la requête était "http", même si le navigateur d'origine demandait qu'elle soit "https".
J'admets que c'est un peu piraté, mais ce qui a fonctionné pour moi était d'implémenter une propriété "JustRedirected" que je pourrais utiliser pour comprendre que la personne a déjà été redirigée une fois. Donc, je teste les conditions spécifiques qui justifient la redirection et, si elles sont remplies, je règle cette propriété (valeur stockée en session) avant la redirection. Même si les conditions http / https pour la redirection sont remplies la deuxième fois, je contourne la logique de redirection et réinitialise la valeur de session «JustRedirected» sur false. Vous aurez besoin de votre propre logique de test conditionnel, mais voici une implémentation simple de la propriété:
la source
Je vais jeter mes deux cents dedans. SI vous avez accès au côté serveur IIS, alors vous pouvez forcer HTTPS en utilisant les liaisons de protocole. Par exemple, vous avez un site Web appelé Blah . Dans IIS, vous configurez deux sites: Blah et Blah (Redirection) . Pour Blah, configurez uniquement la
HTTPS
liaison (etFTP
si vous en avez besoin, assurez-vous également de la forcer via une connexion sécurisée). Pour Blah (Redirection), configurez uniquement laHTTP
liaison. Enfin, dans la section HTTP Redirect pour Blah (Redirect), assurez-vous de définir une redirection 301 vers votre propre dossier racine, sinon le Web.confighttps://blah.com
, avec la destination exacte activée. Assurez-vous que chaque site dans IIS pointe vers sera tout foutu. Assurez-vous également d'avoirHSTS
configuré sur votre site HTTPSed afin que les demandes ultérieures du navigateur soient toujours forcées à HTTPS et qu'aucune redirection ne se produise.la source
Ceci est une réponse plus complète basée sur @Troy Hunt. Ajoutez cette fonction à votre
WebApplication
classe dansGlobal.asax.cs
:(Pour activer SSL sur votre build local, activez-le dans le dock Propriétés du projet)
la source
-> Ajoutez simplement [RequireHttps] en haut de la classe publique HomeController: Controller.
-> Et ajoutez GlobalFilters.Filters.Add (nouveau RequireHttpsAttribute ()); dans la méthode 'protected void Application_Start ()' dans le fichier Global.asax.cs.
Ce qui oblige l'ensemble de votre application à passer au HTTPS.
la source
J'ai passé du temps à chercher les meilleures pratiques qui ont du sens et j'ai trouvé les suivantes qui fonctionnaient parfaitement pour moi. J'espère que cela vous sauvera un jour.
Utilisation du fichier de configuration (par exemple un site Web asp.net) https://blogs.msdn.microsoft.com/kaushal/2013/05/22/http-to-https-redirects-on-iis-7-x-and- plus haute/
ou sur votre propre serveur https://www.sslshopper.com/iis7-redirect-http-to-https.html
[RÉPONSE COURTE] Simplement Le code ci-dessous entre à l'intérieur
la source
Dans IIS10 (Windows 10 et Server 2016), à partir de la version 1709, il existe une nouvelle option plus simple pour activer HSTS pour un site Web.
Microsoft décrit les avantages de la nouvelle approche ici , et de fournir de nombreux exemples de la façon de mettre en œuvre le changement d'un programme ou en modifiant directement le fichier ApplicationHost.config (qui est comme web.config mais fonctionne au niveau IIS, plutôt qu'au niveau de chaque site ). ApplicationHost.config se trouve dans C: \ Windows \ System32 \ inetsrv \ config.
J'ai décrit ici deux des méthodes d'exemple pour éviter la pourriture des liens.
Méthode 1 - Modifiez le fichier ApplicationHost.config directement Entre les
<site>
balises, ajoutez cette ligne:Méthode 2 - Ligne de commande: exécutez ce qui suit à partir d'une invite de commande élevée (c'est-à-dire avec le bouton droit de la souris sur CMD et exécutez en tant qu'administrateur). N'oubliez pas d'échanger Contoso avec le nom de votre site tel qu'il apparaît dans le Gestionnaire des services Internet (IIS).
Les autres méthodes proposées par Microsoft dans ces articles peuvent être de meilleures options si vous vous trouvez dans un environnement hébergé où vous avez un accès limité.
Gardez à l'esprit que la version 1709 d'IIS10 est maintenant disponible sur Windows 10, mais pour Windows Server 2016, il est sur une autre voie de publication et ne sera pas publié en tant que correctif ou service pack. Voir ici pour plus de détails sur 1709.
la source
Si vous utilisez ASP.NET Core, vous pouvez essayer le package nuget SaidOut.AspNetCore.HttpsWithStrictTransportSecurity.
Ensuite, il vous suffit d'ajouter
Cela ajoutera également l'en-tête HTTP StrictTransportSecurity à toutes les demandes effectuées à l'aide du schéma https.
Exemple de code et de documentation https://github.com/saidout/saidout-aspnetcore-httpswithstricttransportsecurity#example-code
la source