J'ai cherché sur Google et StackOverflow en essayant de trouver une solution à ce problème, mais ils semblent tous se rapporter à ASP.NET, etc.
J'utilise généralement Linux sur mes serveurs, mais j'utilise Windows avec IIS 7.5 (et Plesk 10) pour ce client. C’est la raison pour laquelle je suis peu familier avec les fichiers IIS et web.config. Dans un fichier .htaccess
, vous pouvez utiliser des conditions de réécriture pour détecter si le protocole est HTTPS et rediriger en conséquence. Existe-t-il un moyen simple pour y parvenir à l'aide d'un fichier web.config ou même à l'aide du module 'URL Rewrite' que j'ai installé?
J'ai pas d'expérience avec ASP.NET donc si cela est impliqué dans la solution, veuillez inclure des étapes claires sur la manière de les implémenter.
Si je fais cela avec web.config et not PHP, c’est que j’aimerais forcer HTTPS sur tous les éléments du site.
Vous avez besoin du module URL Rewrite, de préférence v2 (je n’ai pas installé v1, je ne peux donc pas garantir que cela fonctionnera là-bas, mais cela devrait être le cas).
Voici un exemple de ce type web.config - il forcera HTTPS pour TOUTES les ressources (en utilisant la redirection permanente 301):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Redirect to https" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_Host}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
P.S. Cette solution particulière n'a rien à voir avec ASP.NET/PHP ou toute autre technologie, car elle utilise uniquement le module de réécriture d'URL - elle est traitée à l'un des niveaux initial/inférieur - avant que la requête parvienne au pointez où votre code est exécuté.
Pour ceux qui utilisent ASP.NET MVC. Vous pouvez utiliser RequireHttpsAttribute pour forcer toutes les réponses à être HTTPS:
GlobalFilters.Filters.Add(new RequireHttpsAttribute());
Vous pouvez également souhaiter prendre d'autres mesures pour sécuriser votre site:
Forcer les jetons anti-contrefaçon à utiliser SSL/TLS:
AntiForgeryConfig.RequireSsl = true;
Exiger que les cookies requièrent HTTPS par défaut en modifiant le fichier Web.config:
<system.web>
<httpCookies httpOnlyCookies="true" requireSSL="true" />
</system.web>
Utilisez le package NuGet NWebSec.Owin et ajoutez la ligne de code suivante pour activer la sécurité du transport strict (HSTS) sur le site. N'oubliez pas d'ajouter la directive de préchargement ci-dessous et de soumettre votre site au site de préchargement HSTS . 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 .
// app is your OWIN IAppBuilder app in Startup.cs
app.UseHsts(options => options.MaxAge(days: 720).Preload());
Utilisez le package NWebSec.Owin NuGet et ajoutez la ligne de code suivante pour activer l'identification de clé publique (HPKP) sur l'ensemble du site. Plus d'informations ici et ici .
// app is your OWIN IAppBuilder app in Startup.cs
app.UseHpkp(options => options
.Sha256Pins(
"Base64 encoded SHA-256 hash of your first certificate e.g. cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=",
"Base64 encoded SHA-256 hash of your second backup certificate e.g. M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE=")
.MaxAge(days: 30));
Incluez le schéma https dans toutes les URL utilisées. _ { Politique de sécurité du contenu (CSP) } _ L'en-tête HTTP et Intégrité de la sous-source (SRI) } ne sont pas lisibles lorsque vous modifiez le schéma dans certains navigateurs. Il vaut mieux être explicite à propos de HTTPS. par exemple.
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.4/bootstrap.min.js">
</script>
Utilisez le modèle de projet ASP.NET MVC Boilerplate Visual Studio pour générer un projet avec tout cela et bien plus intégré. Vous pouvez également afficher le code sur GitHub .
Pour augmenter la réponse de LazyOne, voici une version annotée de la réponse.
<rewrite>
<rules>
<clear />
<rule name="Redirect all requests to https" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action
type="Redirect" url="https://{HTTP_Host}{REQUEST_URI}"
redirectType="Permanent" appendQueryString="false" />
</rule>
</rules>
</rewrite>
Effacez toutes les autres règles qui ont peut-être déjà été définies sur ce serveur. Créez une nouvelle règle, que nous nommerons "Rediriger toutes les demandes vers https". Après avoir traité cette règle, ne traitez plus de règles! Correspond à toutes les URL entrantes. Vérifiez ensuite si toutes ces autres conditions sont vraies: HTTPS est désactivé. Eh bien, ce n'est qu'une condition (mais assurez-vous que c'est vrai). Si tel est le cas, envoyez une redirection permanente 301 au client à l'adresse http://www.foobar.com/whatever?else=the#url-contains
. N'ajoutez pas la chaîne de requête à la fin, car cela dupliquerait la chaîne de requête!
C'est ce que signifient les propriétés, les attributs et certaines des valeurs.
MatchAll
) ou si l'une quelconque des conditions doit être vraie (MatchAny
); semblable à ET vs OU. match
et sa conditions
sont toutes vraies .redirect
(côté client) ou rewrite
(côté serveur). https://
avec deux variables de serveur.url
résultante; dans ce cas, nous le définissons sur false, car le {REQUEST_URI}
l'inclut déjà.Les variables du serveur sont
{HTTPS}
qui est soit OFF
ou ON
. {HTTP_Host}
est www.mysite.com
, et {REQUEST_URI}
inclut le reste de l'URI, par exemple. /home?key=value
#fragment
(voir le commentaire de LazyOne).Voir aussi: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
La réponse acceptée n'a pas fonctionné pour moi . J'ai suivi les étapes sur ce blog .
Un point clé qui me manquait était que je devais télécharger et installer l'URL Rewrite Tool for IIS. Je l'ai trouvé ici . Le résultat était le suivant.
<rewrite>
<rules>
<remove name="Http to Https" />
<rule name="Http to Https" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<serverVariables />
<action type="Redirect" url="https://{HTTPS_Host}{REQUEST_URI}" />
</rule>
</rules>
</rewrite>
In Dot Net Core, follow the instructions at https://docs.Microsoft.com/en-us/aspnet/core/security/enforcing-ssl
***In your startup.cs add the following,***
// Requires using Microsoft.AspNetCore.Mvc;
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});`enter code here`
***To redirect Http to Https, add the following in the startup.cs***
// Requires using Microsoft.AspNetCore.Rewrite;
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
var options = new RewriteOptions()
.AddRedirectToHttps();
app.UseRewriter(options);
Je n'ai pas été autorisé à installer l'URL Rewrite dans mon environnement.
J'ai donc trouvé un autre chemin.
Ajouter ceci à mon web.config ajoutait l’erreur de réécriture et travaillait sur IIS 7.5
<system.webServer>
<httpErrors errorMode="Custom" defaultResponseMode="File" defaultPath="C:\WebSites\yoursite\" >
<remove statusCode="403" subStatusCode="4" />
<error statusCode="403" subStatusCode="4" responseMode="File" path="redirectToHttps.html" />
</httpErrors>
Ensuite, suivez les conseils ici: https://www.sslshopper.com/iis7-redirect-http-to-https.html
J'ai créé le fichier HTML qui effectue la redirection (redirectToHttps.html):
<html>
<head><title>Redirecting...</title></head>
<script language="JavaScript">
function redirectHttpToHttps()
{
var httpURL= window.location.hostname + window.location.pathname + window.location.search;
var httpsURL= "https://" + httpURL;
window.location = httpsURL;
}
redirectHttpToHttps();
</script>
<body>
</body>
</html>
J'espère que quelqu'un trouvera cela utile, car je ne pourrais pas trouver toutes les pièces au même endroit ailleurs.
L'excellente bibliothèque NWebsec peut mettre à niveau vos demandes de HTTP à HTTPS en utilisant sa balise upgrade-insecure-requests
dans le Web.config
:
<nwebsec>
<httpHeaderSecurityModule>
<securityHttpHeaders>
<content-Security-Policy enabled="true">
<upgrade-insecure-requests enabled="true" />
</content-Security-Policy>
</securityHttpHeaders>
</httpHeaderSecurityModule>
</nwebsec>