Szigorú HTTP biztonság

A HTTP Strict Transport Security ( HSTS ) egy javasolt biztonsági házirend a HTTP számára , amely lehetővé teszi a webkiszolgáló számára, hogy kompatibilisnek nyilvánítsa a felhasználói ügynöknek (például egy webböngészőnek), hogy biztonságos kapcsolaton keresztül kell kommunikálnia vele. (Mint például a HTTPS ). A házirendet ezért a kiszolgáló a HTTP-válaszon keresztül továbbítja a felhasználói ügynökhöz a „Szigorú-Szállítási-Biztonság” nevű fejléc mezőben. A házirend meghatározza azt az időtartamot, amely alatt a felhasználói ügynöknek csak biztonságos módon kell hozzáférnie a szerverhez.

Tábornok

Amikor a HSTS házirend egy webhelynél aktív, a kompatibilis felhasználói ügynök a következőképpen működik:

  1. Az összes nem védett linket automatikusan biztonságos hivatkozásokra cseréli. Például a http://www.example.com/une/page/ helyére a szerver elérése előtt automatikusan a https://www.example.com/une/page/ lép .
  2. Ha a kapcsolat biztonsága nem biztosítható (például a TLS- tanúsítvány önaláírt), akkor hibaüzenetet jelenít meg, és e hiba miatt megtagadja a felhasználó hozzáférését a webhelyhez.

A HSTS házirend segít megvédeni a webhely felhasználóit néhány passzív ( lehallgatás ) és aktív hálózati támadástól . Egy ember a középen támadás nem képes elfogni egy kérést, amíg a HSTS aktív ezen a webhelyen.

Szintaxis

Aktiválja a HSTS-t egy évre:

Strict-Transport-Security "max-age=31536000"

Aktiválja az aldomaineknél is:

Strict-Transport-Security "max-age=31536000; includeSubDomains"

Engedélyezze a webhely hozzáadását az előre feltöltött listákhoz:

Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Jó gyakorlatok

  • A HSTS-t az elsődleges tartományban kell deklarálni. Például a https://sub.example.com a HSTS-t is használja a https://example.com webhelyen
  • A https://www.example.com oldalaknak tartalmazniuk kell egy kérést egy erőforráshoz a https://example.com webhelyen az elsődleges domain védelme érdekében. Az includeSubDomains direktívával ez lehetővé teszi az összes aldomain védelmét.

Előre betöltött lista

A HSTS csak az első csatlakozás után véd. A hiba kijavításához a böngészők előretöltési mechanizmust kínálnak: A webhelyek regisztrálhatnak a (z) https://hstspreload.org/ címen , hogy felvételüket kérjék ebbe a listába. Az előterhelés paraméter jelenléte biztosítja a beleegyezésüket.

Támogatás

A HSTS-t támogató böngészők

  • A Google Chrome és a Chromium támogatja a HSTS-t a 4.0.211.0 verzió óta.
  • HSTS támogatás engedélyezve Firefox források óta2010. augusztus 25, a Firefox 4.0 óta elérhető. A böngésző 17. verziója belsőleg tartalmaz egy előre definiált webhelyeket, amelyeket HSTS segítségével kell összekapcsolni, hogy elkerüljék az eltérítést az első kapcsolat során, ahol a böngésző nem tudja, hogy a webhely kérni fogja-e a HSTS-t vagy sem.
  • A Firefox " NoScript  " kiterjesztéséhez az  1.9.8.9 verzió óta HSTS szükséges
  • A  NoScript-ből származó Chrome / Firefox / Opera " HTTPS Everywhere " kiterjesztés  általánosítja a HSTS fogalmát azáltal, hogy egyes tartományok elérési útvonalainak részhalmazait tartalmazza, és átírja a tartomány nem biztonságos URI-ját: http: // az URI-ban https: // of egy relatív tartomány (például a http://en.wikipedia.org és a https://en.wikipedia.org között ).
  • Opera 12
  • Internet Explorer 11

Végrehajtás

A szigorú szállítás-biztonság fejléceket HTTPS-válaszokon keresztül kell elküldeni. Az ügyféloldali megvalósításnak nem szabad tiszteletben tartania azokat az STS-fejléceket, amelyeket nem HTTPS-válaszokon, vagy nem megfelelően konfigurált és megbízható tanúsítvány nélkül küldött HTTPS-válaszokon keresztül küldenek. A következő kiszolgáló-konfigurációs részleteket SSL- helykonfigurációs blokk kontextusban kell végrehajtani, és a mintakódokat csak a HTTPS válaszok kontextusában szabad végrehajtani.

A maximális időt (max-életkor) másodpercben adják meg. Az alábbi példákban szereplő 31536000 másodperc nagyobb vagy kisebb értékekkel helyettesíthető, a webkiszolgáló-kezelő igényeitől függően.

Apache megvalósítás

# load module (example using [RHEL]) LoadModule headers_module modules/mod_headers.so # redirect all HTTP to HTTPS (optional) <VirtualHost *:80> ServerAlias * RewriteEngine On RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [redirect=301] </VirtualHost> # HTTPS-Host-Configuration <VirtualHost 10.0.0.1:443> # Use HTTP Strict Transport Security to force client to use secure connections only Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" # Further Configuration goes here [...] </VirtualHost>

Lighttpd megvalósítás

A protokoll ezen megvalósítása részleges, és nem kínál átirányítást nem biztonságos környezetből.

server.modules += ( "mod_setenv" ) $HTTP["scheme"] == "https" { setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=31536000; includeSubDomains; preload") }

Nginx megvalósítás

A protokoll ezen megvalósítása részleges, és nem kínál átirányítást nem biztonságos környezetből.

# Use HTTP Strict Transport Security to force client to use secure connections only add_header Strict-Transport-Security max-age=31536000;

A protokoll ezen megvalósítása részleges, és nem kínál átirányítást nem biztonságos környezetből.

# Use HTTP Strict Transport Security to force client to use secure connections only with includeSubdomains add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload;";

Lakkozás megvalósítás

A protokoll ezen megvalósítása részleges, és nem kínál átirányítást nem biztonságos környezetből.

// Add the following line to your vcl_deliver // Note: Varnish MUST be used with a frontend TLS proxy (e.g Hitch) for SSL/TLS support sub vcl_deliver { set resp.http.Strict-Transport-Security = "max-age=31536000; includeSubDomains"; }

NodeJS megvalósítás

// Avec l' utilisation du paquet NPM helmet. var helmet = require('helmet') ... app.use(helmet.hsts({ maxAge: 31536000000, includeSubdomains: true, force: true }));

IIS megvalósítása

A fejléc hozzáadható a web.config fájl módosításával.

A protokoll ezen megvalósítása részleges, és nem kínál átirányítást nem biztonságos környezetből.

<configuration> <system.webServer> <httpProtocol> <customHeaders> <add name="Strict-Transport-Security" value="max-age=31536000"/> </customHeaders> </httpProtocol> </system.webServer> </configuration>

PHP megvalósítás

// Use HTTP Strict Transport Security to force client to use secure connections only $use_sts = true; // iis sets HTTPS to 'off' for non-SSL requests if ($use_sts && isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') { header('Strict-Transport-Security: max-age=31536000; includeSubDomains; preload'); } elseif ($use_sts) { header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], true, 301); // we are in cleartext at the moment, prevent further execution and output die(); }

Perl megvalósítás

# Use HTTP Strict Transport Security to force client to use secure connections only use CGI; use URI; my $q = new CGI; my $url = URI->new($cgi->request_uri) my $use_sts = 1; if ($use_sts and $url->scheme eq 'https') { print $q->header('Strict-Transport-Security' => 'max-age=31536000; includeSubDomains; preload'); } elsif ($use_sts) { $url->scheme('https'); print $q->redirect(status => 301, location => $url); }

Ruby on Rails megvalósítás

config.force_ssl = true

ASP megvalósítás

Dim use_sts use_sts = True If use_sts = True And Request.Url.Scheme = "https" Then Response.AddHeader "Strict-Transport-Security","max-age=31536000" ElseIf use_sts = True And Request.Url.Scheme = "http" Then Response.Status="301 Moved Permanently" Response.AddHeader "Location", "https://" + Request.Url.Host + Request.Url.PathAndQuery End If

ASP.NET Core megvalósítás

//Startup.cs public void ConfigureServices(IServiceCollection services) { services.AddHsts(opts => { opts.MaxAge = TimeSpan.FromSeconds(31536000); // Activer pour les sous-domaines, et autoriser l'ajout du site dans les listes préchargées opts.IncludeSubDomains = true; opts.Preload = true; }); // Configuration des autres services } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (!env.IsDevelopment()) { app.UseHsts(); } app.UseHttpsRedirection(); // Configuration de l'application }

ColdFusion Markup Language (CFML) megvalósítás

A protokoll ezen megvalósítása részleges, és nem kínál átirányítást nem biztonságos környezetből.

<cfset use_sts = true> <cfif use_sts is "True"> <cfheader name="Strict-Transport-Security" value="max-age=31536000"> <cfelseif use_sts is "True"> <cfheader statuscode="301" statustext="Moved permanently"> <cfheader name="Location" value="https://" + CGI.SERVER_NAME + CGI.SCRIPT_NAME + CGI.QUERY_STRING> </cfif>

JavaServer Pages (JSP) megvalósítás

use_sts = true; if(use_sts) { if(request.getScheme().equals("https")) { // Envoi de l'en-tête HSTS response.setHeader("Strict-Transport-Security", "max-age=31536000"); } else { response.setStatus(301); url = "https://" + request.getServerName() + request.getPathInfo() + request.getQueryString(); response.setHeader("Location", url); } }

Visual Basic .NET implementáció

A protokoll ezen megvalósítása részleges, és nem kínál átirányítást nem biztonságos környezetből.

Dim use_sts As Boolean = True If use_sts = True Then Response.AppendHeader("Strict-Transport-Security", "max-age=31536000") ElseIf use_sts = True Then Response.AppendHeader("Status-Code", "301") Response.AppendHeader("Location", "https://") End If

F5 BIG-IP LTM megvalósítás

Hozzon létre egy iRule-szabályt, és alkalmazza azt a HTTPS virtuális kiszolgálóra.

A protokoll ezen megvalósítása részleges, és nem kínál átirányítást nem biztonságos környezetből.

# iRule "Insert_HTTP_Strict_Transport_Security" when HTTP_RESPONSE { HTTP::header insert Strict-Transport-Security "max-age=31536000 ; includeSubDomains ; preload" }

HAProxy megvalósítás

Adja hozzá ezt a sort a konfigurációs fájl HTTPS kezelőfelületéhez.

A protokoll ezen megvalósítása részleges, és nem kínál átirányítást nem biztonságos környezetből.

http-response set-header Strict-Transport-Security max-age=31536000;\ includeSubDomains;\ preload;

OpenBSD httpd implementáció

server "example.com" { listen on 10.0.0.1 port 80 block return 301 "https://$HTTP_HOST$REQUEST_URI" } server "example.com" { listen on 10.0.0.1 tls port 443 hsts max-age 31536000 hsts subdomain hsts preload # Further Configuration goes here }

Megjegyzések és hivatkozások

  1. (en) https://dev.chromium.org/sts
  2. http://linuxfr.org/news/hsts-arrive-dans-firefox-4
  3. (in) "  HTTP Strict Transport Security - Mozilla Security Blog  " a Mozilla Security Blogon (hozzáférés: 2020. október 20. ) .
  4. (in) "  HSTS előzetes betöltése - Mozilla Security Blog  " a Mozilla Security Blogon (hozzáférés: 2020. október 20. ) .
  5. (in) https://www.eff.org/https-everywhere az Elektronikus Határ Alapítvány honlapján
  6. (in) "  Hogyan tudunk segíteni? - Opera súgó  ” , az Opera súgójában (hozzáférés : 2020. október 20. ) .
  7. (in) "A  HTTP szigorú szállítási biztonság az Internet Explorer 11-hez érkezik Windows 8.1 és Windows 7 rendszeren  " a Microsoft Edge Blogban ,2015. június 9(megtekintés : 2020. október 20. ) .

Külső linkek