Usuari:Mavarog/Taller
HTTP Strict Transport Security (HSTS) és una proposta de mecanisme de política de seguretat web en què el servidor web declara que els agents d'usuari que el complisquen (com els navegadors web) interactuaran amb ell només usant connexions segures (com HTTPS). La política serà comunicada pel servidor web a l'agent d'usuari via el camp de resposta de la capçalera HTTP anomenat "Strict-Transport-Security". La política especificarà el període de temps durant el qual l'agent d'usuari haurà d'accedir al servidor només d'una forma segura.[1]
Història de l'especificació
[modifica]L'especificació de l'HSTS és actualment un Esborrany d'Internet (de l'anglès Internet-Draft) de la IETF.[1] Els autors l'enviaren com un Esborrany d'Internet el 17 de juny de 2010,[2] i des d'aleshores ha passat per, almenys, dues revisions. Va ser al convertir-se en un Esborrany d'Internet que van alterar el nom de l'especificació, de "Strict Transport Security" va passar a anomenar-se "HTTP Strict Transport Security", ja que aquesta especificació només es aplicable a HTTP.[3] (Nota: El camp de resposta de la capçalera definit en l'especificació HSTS continua sent "Strict-Transport-Security").
L'última versió de la comunitat de la llavors anomenada especificació STS va ser publicada el 18 de desembre de 2009, amb revisions basades en comentaris de la comunitat.[4]
L'especificació original de l'esborrany per Jeff Hodges de PayPal, Collin Jackson and Adam Barth va ser publicada el 18 de setembre de 2009.[5]
L'especificació es basa en el treball original de Jackson i Barth com es descriu en el seu article "ForceHTTPS: Protecting High-Security Web Sites from Network Attacks”.[6]
Vista general
[modifica]Sempre que una política HSTS estiga activa per a un lloc web, un agent d'usuari que puga complir amb la política farà el següent:
- Automàticament canviarà qualsevol enllaç insegur al lloc web a un enllaç segur (per exemple, http://www.exemple.com/qualsevol/pagina/ es canviarà per https://www.exemple.com/qualsevol/pagina/ abans d'accedir al servidor).
- Si no es pot assegurar la seguretat de la connexió (per example, el certificat TLS del servidor està signat per ell mateix), es mostrarà un missatge d'error i no permetrà accedir-hi a l'usuari.
La política HSTS protegeix els usuaris del lloc web tant d'atacs de xarxa passius (eavesdropping) com actius. Un atac de man-in-the-middle no podrà interceptar cap sol·licitud al lloc web mentre que el navegador de l'usuari tinga actiu l'HSTS per al lloc.
Limitacions
[modifica]La sol·licitud inicial roman desprotegida front a atcas actius si usa un protocol insegur com HTTP o si la URI per a la sol·licitud inicial s'ha obtingut d'un canal insegur. El mateix s'aplica a la primera sol·licitud després del període d'activitat especificat perquè expire la política HSTS. Google Chrome encara aquest limitació implementant una "STS preloaded list".[7]
Suport
[modifica]Llocs web:
- PayPal activa la capçalera Strict-Transport-Security en els seus llocs web que només tenen accés HTTPS.[8]
- DEF CON [9]
- https://www.acdet.com/[9]
- https://squareup.com/[9]
- https://www.ssllabs.com/[9]
- https://voipscanner.com/[9]
- https://www.strongspace.com/[9]
- https://www.elanex.biz/[10]
- https://jottit.com/[10]
- https://sunshinepress.org/[10]
- https://www.noisebridge.net/[10]
- https://neg9.org/[10]
- https://riseup.net/[10]
- https://factor.cc/[10]
- https://(support,members,id,lists).mayfirst.org/[10]
Evidentment, aquesta no és un llista completa de llocs web que suporten STS.
Navegadors:
- Google Chrome suporta HSTS des de la versió 4.0.211.0.[11]
- HSTS landed in the Firefox nightlies as of 25 Aug 2010 [12]
- L'extensió NoScript per a Firefox suporta HSTS des de la versió 1.9.8.9.[13]
- L'extensió HTTPS Everywhere per a Firefox, derivada de NoScript, generalitza el concepte de HSTS, per a incluir subconjunts de camins de certs dominis i reescriure URIs de http:// insegures d'un domini a altre segures https:// d'un altre domini (per exemple, de http://en.wikipedia.org a https://secure.wikimedia.org).[14]
- Internet SSL Survey 2010 v1.6[9]
- Strict Transport Security - The Chromium Projects[10]
Implementació
[modifica]Les capçaleres Strict-Transport-Security han de ser enviades via respostes HTTPS. Les implementacions clients no han fer cas a capçaleres STS enviades a través de respostes no HTTPS, o a través de respostes HTTPS que no usen certificats degudament configurats i confiables. Els següents fragments de configuració del servidor han d'anar en la secció SSL de la configuració del lloc, i els exemples de codi han d'anar només dins del context de les respostes HTTPS.
Fixe's que max-age està en segons. Els 500 segons dels exemples de més avall pot ser canviat per un valor molt més gran depenent de com Note that the max-age is provided in seconds. The 500 seconds in the examples below can be changed to a much larger value depending on how long the web server operator is willing to commit to using HTTPS.
Implementació en Apache.
# load module (example using [RHEL])
LoadModule headers_module modules/mod_headers.so
# Use HTTP Strict Transport Security to force client to use secure connections only
Header set Strict-Transport-Security "max-age=500"
Header append Strict-Transport-Security includeSubDomains
Implementació en nginx.
# Use HTTP Strict Transport Security to force client to use secure connections only
add_header Strict-Transport-Security max-age=500;
Implementació en PHP.
// Use HTTP Strict Transport Security to force client to use secure connections only
$use_sts = true;
if ($use_sts && isset($_SERVER['HTTPS'])) {
header('Strict-Transport-Security: max-age=500');
} elseif ($use_sts && !isset($_SERVER['HTTPS'])) {
header('Status-Code: 301');
header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}
Implementació en Perl.
# Use HTTP Strict Transport Security to force client to use secure connections only
use CGI;
$q = new CGI;
$use_sts = true;
if ($use_sts == true) {
print $q->header('Strict-Transport-Security' => 'max-age=500');
} elseif ($use_sts == true) {
header('Status-Code: 301');
$url = 'https://'.$ENV{'SERVER_NAME'}.$ENV{'PATH_INFO'}.$ENV{'QUERY_STRING'}
print $q->redirect(status => '301 Moved Permanently', location => $url);
}
Implementació en Ruby on Rails.
# Use HTTP Strict Transport Security to force client to use secure connections only
use_sts = true;
if use_sts == true
@response.headers['Strict-Transport-Security'], 'max-age=500'
if use_sts == true
head :moved_permanently, :location => "https://" + request.env["SERVER_ADDR"] + request.env["REQUEST_URI"]
Implementació en ASP.
'Use HTTP Strict Transport Security to force client to use secure connections only
Dim use_sts
use_sts = True
If use_sts = True And Request.Url.Scheme = "https" Then
Response.AddHeader "Strict-Transport-Security","max-age=500"
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
Implementació en ColdFusion Markup Language (CFML).
<!--- Use HTTP Strict Transport Security to force client to use secure connections only --->
<cfset use_sts = true>
<cfif use_sts is "True">
<cfheader name="Strict-Transport-Security" value="max-age=500">
<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>
Implementació en JavaServer Pages (JSP).
// Use HTTP Strict Transport Security to force client to use secure connections only
use_sts = true;
if(use_sts == true)
response.setHeader("Strict-Transport-Security", "max-age=500");
else if(use_sts == true)
response.setStatus(301);
url = "https://" + request.getServerName() + request.getPathInfo() + request.getQueryString();
response.setHeader("Location", url);
Implementació en Visual Basic .NET.
'Use HTTP Strict Transport Security to force client to use secure connections only
Dim use_sts As Boolean = True
If use_sts = True Then
Response.AppendHeader("Strict-Transport-Security", "max-age=500")
ElseIf use_sts = True Then
Response.AppendHeader("Status-Code", "301")
Response.AppendHeader("Location", "https://")
End If
Implementació com a interceptor Struts 2 en Java.
// Use HTTP Strict Transport Security to force client to use secure connections only
public class StrictTransportSecurityInterceptor extends AbstractInterceptor {
private static final Log logger = LogFactory.getLog(StrictTransportSecurityInterceptor.class);
private static final String HSTS_HEADER = "Strict-Transport-Security";
private static final String HSTS_VALUE_NAME = "max-age=";
private static final int HSTS_VALUE_IN_SECONDS = 10;
private static final String HSTS_VALUE_INCLUDE_SUBDOMAINS = "; includeSubDomains";
@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context = invocation.getInvocationContext();
HttpServletResponse response = (HttpServletResponse) context.get(StrutsStatics.HTTP_RESPONSE);
String headerValue = HSTS_VALUE_NAME + HSTS_VALUE_IN_SECONDS;
response.addHeader(HSTS_HEADER, headerValue);
logger.debug("HSTS interceptor with policy: " + headerValue);
return invocation.invoke();
}
}
<interceptors>
<interceptor name="strictTransportSecurityInterceptor" class="yourPackage.StrictTransportSecurityInterceptor"/>
</interceptors>
<action name="yourActionName" class="yourPackage.YourAction">
<interceptor-ref name="strictTransportSecurityInterceptor"></interceptor-ref>
<result name="success">/success.jsp</result>
</action>
Enllaços externs
[modifica]- draft-hodges-strict-transport-sec-02, Internet-Draft, IETF.
- Strict Transport Security page on W3C Web Security Wiki.
- Security Now - 262: Strict Transport Security
Referències
[modifica]- ↑ 1,0 1,1 «HTTP Strict Transport Security», latest revision. [Consulta: 22 juliol 2010].
- ↑ «HTTP Strict Transport Security -00», 17-06-2010. [Consulta: 22 juliol 2010].
- ↑ Jeff Hodges. «Re: [HASMAT "STS" moniker (was: IETF BoF @IETF-78 Maastricht: HASMAT...)]», 30-06-2010. [Consulta: 22 juliol 2010].
- ↑ «Strict Transport Security -06», 18-12-2009. [Consulta: 23 desembre 2009].
- ↑ «Strict Transport Security -05», 18-09-2009. [Consulta: 19 novembre 2009].
- ↑ «ForceHTTPS: Protecting High-Security Web Site from Network Attacks», 01-04-2008. [Consulta: 19 novembre 2009].
- ↑ Adam Langley. «Strict Transport Security», 08-07-2010. [Consulta: 22 juliol 2010].
- ↑ "Screenshot of Paypal's HTTP request 'Strict-Transport-Security' header"
- ↑ 9,0 9,1 9,2 9,3 9,4 9,5 9,6 Ristić, Ivan (29 July 2010). "Internet SSL Survey 2010 v1.6" (PDF) a Black Hat USA. [Consulta: 19 agost 2010]
- ↑ 10,0 10,1 10,2 10,3 10,4 10,5 10,6 10,7 10,8 The Chromium Developers. «Strict Transport Security - The Chromium Projects», 17-11-2010. [Consulta: 17 novembre 2010].
- ↑ Jeff Hodges. «fyi: Strict Transport Security specification», 18-09-2009. [Consulta: 19 novembre 2009].
- ↑ Sid Stamm. «Mozilla Security Blog: HTTP Strict Transport Security», 27-08-2010. [Consulta: 1r setembre 2010].
- ↑ Giorgio Maone. «Strict Transport Security in NoScript», 23-09-2009. [Consulta: 19 novembre 2009].
- ↑ Electronic Frontier Foundation. «HTTPS Everywhere!», 18-06-2010. [Consulta: 18 juny 2010].