The HTTP protocol by itself is clear text, meaning that any data that is
transmitted via HTTP can be captured and the contents viewed. To keep data private and prevent it from being intercepted, HTTP is often tunnelled through either Secure Sockets Layer (SSL) or Transport Layer Security (TLS). When either of these encryption standards are used, it is referred to as HTTPS.
HTTP Strict Transport Security (HSTS) is an optional response header that can be configured on the server to instruct the browser to only communicate via HTTPS. This will be enforced by the browser even if the user requests a HTTP resource on the same server.
Cyber-criminals will often attempt to compromise sensitive information passed from the client to the server using HTTP. This can be conducted via various Man-in-The-Middle (MiTM) attacks or through network packet captures.
Security Scanners would recommend to using adding a response header HTTP Strict-Transport-Security or HSTS when the application is using Https.
Depending on the framework being used the implementation methods will vary, however it is advised that the
Strict-Transport-Security header be configured on the server. One of the options for this header is
max-age, which is a representation (in milliseconds) determining the time in which the client’s browser will adhere to the header policy. The browser will memorize the HSTS policy for the period specified in max-age directive.
Within this period, if an user tries to visit the same website but types http:// or omits the scheme at all, the browser will automatically turn the insecure link to the secure one (https://) and make an HTTPS connection to the server. Depending on the environment and the application this time period could be from as low as minutes to as long as days.
Enabling includeSubDomains attribute of the element of the root domain further enhances the coverage of the HSTS policy to all its subdomains.
HSTS has a separate mechanism to preload a list of registered domains to the browser out of the box.
It is also usually recommended to redirect all http traffic to https. I’ve written another post on how to do that.
To add the HSTS Header, follow the steps below:
- Open IIS manager.
- Select your site.
- Open HTTP Response Headers option.
- Click on Add in the Actions section.
- In the Add Custom HTTP Response Header dialog, add the following values:
Value: max-age=31536000; includeSubDomains; preload
Or directly in web.config as below under system.webServer:
<httpProtocol> <customHeaders> <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" /> </customHeaders> </httpProtocol>