对于百度仅找到Apache,Nginx,Lighttpd添加HSTS头表示各种不爽,于是我在这里收集了各种添加HSTS头的正常方法&奇葩方法,直接找到对应的即可。

Apache

编辑你的 apache 配置文件编辑你的 apache 配置文件(/etc/httpd/conf/httpd.conf)。

首先加载mod_header库

LoadModule headers_module modules/mod_headers.so

然后对应站点VirtualHost里面插入HSTS响应头信息。

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

别忘了保存Apache配置文件,然后重启。

Nginx

编辑Nginx配置文件(/usr/local/etc/nginx/nginx.conf)。

将以下代码添加到server块。

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

如果不行可以试试直接插入到 location ~ *php 内。

location ~ [^/]\.php(/|$) {
	add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
}

记得保存配置文件,然后重启。

Lighttpd

将下述配置增加到你的 Lighttpd 配置文件/etc/lighttpd/lighttpd.conf ),没试过不知道什么情况。

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

一样要记得保存配置文件,然后重启。

IIS

一样没试过,请另行研究。

此模块只支持IIS7及以上版本,IIS6看下面ASP.NET怎么加就怎么加吧。

但是加载该模块前最好先设置好强制HTTPS跳转规则。

HSTS-IIS模块下载地址:https://github.com/FWest98/hsts-iis-module/releases

安装:https://github.com/FWest98/hsts-iis-module/blob/develop/documentation/Installation.md

开启HSTS:https://github.com/FWest98/hsts-iis-module/blob/develop/documentation/Enabling%20HSTS.md

Tomcat

编辑web.xml文件(tomcat/conf/web.xml)

找到以下几行,去掉注释。

<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<async-supported>true</async-supported>
</filter>

在后面添加以下几行:

<init-param>
<param-name>hstsMaxAgeSeconds</param-name>
<param-value>63072000</param-value>
</init-param>

最后找到以下几行,去掉注释。

<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

仍然要记得保存,然后重启。

PHP

PHP最简单了,将以下代码添加到网站根目录的index.php即可。

header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");

ASP.NET

如果你可以修改web.config文件,你可以添加以下代码(如果你已经设置了强制HTTPS跳转可以无视前一条规则)。

<rewrite>
 <rules>
  <rule stopprocessing="true" name="HTTP to HTTPS redirect">
   <match url="(.*)" />
   <conditions>
    <add ignorecase="true" pattern="off" input="{HTTPS}" />
   </conditions>
   <action url="https://{HTTP_HOST}/{R:1}" redirecttype="Permanent" type="Redirect" />
  </rule>
 </rules>
 <outboundrules>
  <rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
   <match pattern=".*" servervariable="RESPONSE_Strict_Transport_Security" />
   <conditions>
    <add ignorecase="true" pattern="on" input="{HTTPS}" />
   </conditions>
   <action type="Rewrite" value="max-age=63072000; includeSubDomains; preload" />
  </rule>
 </outboundrules>
</rewrite>

JSP

没学过JSP,咋用自己看着办。

response.setHeader("Strict-Transport-Security", "max-age=63072000; includeSubdomains; preload");

NodeJS

使用Helmet.js,至于咋用可以看官方文档,链接在文章末尾。

全能方案

如果你使用CloudFlare CDN,可以通过CloudFlare添加HSTS。

1,在你的域名后台Crypto选项卡找到HTTP Scrict Transport Security(HSTS)。

QQ截图20170311115917

2,这里你需要确认网站是否启用HTTPS,

如果开启了HTTPS,那么可以勾选I understand然后点击Next Step。

QQ截图20170311115940

3,对HSTS进行配置。

max-age最多只能设置为12个月。

QQ截图20170311122406

确认完毕点击Save保存即可。

参考文章

部分需FQ

https://zhangzifan.com/http-hsts.html

https://helmetjs.github.io/docs/hsts/

http://rical.blogspot.jp/2016/10/setting-hsts-in-asp-net.html

http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx

http://stackoverflow.com/questions/21887524/enable-http-strict-transport-security-hsts-in-azure-webroles

http://stackoverflow.com/questions/27541755/add-hsts-feature-to-tomcat


一个苦逼高中党的日常