如果缺少HSTS的配置,网站可能会被扫描出如下图所示的漏洞
服务器开启HSTS的方法
IIS操作方法:
确认是否安装 “URL 重写” 或者 “URL Rewrite” 模块 , 如果您已经安装可以跳过。
“URL重写” 模块下载地址
https://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads
已经安装模块的话,在iis的界面可以看到如下图所示的图标:
点击“添加规则”
在“出站规则” 中 选择“空白规则”
名称:http响应 变量名称:RESPONSE_Strict_Transport_Security 模式: .*
在“条件”模块中选择“添加”
条件输入:{HTTPS} 模式:on
值:max-age=31536000
操作完成后在配置文件web.config中会自动增加如下配置项:
Tomcat操作方法:
如果仅对单个系统进行操作,修改项目目录中的web.xml文件。
如果对tomcat下所有系统进行操作,修改tomcat/conf录中的web.xml文件。
需要修改的内容如下图所示,在原来的文件中添加红色方框内的配置。
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>hstsMaxAgeSeconds</param-name>
<param-value>31536000</param-value>
</init-param>
<init-param>
<param-name>antiClickJackingEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>antiClickJackingOption</param-name>
<param-value>SAMEORIGIN</param-value>
</init-param>
<init-param>
<param-name>blockContentTypeSniffingEnabled</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xssProtectionEnabled</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
验证是否操作成功
通过浏览器访问网站,根据服务器返回的响应头信息,可以看出包含Strict-Transport-Security属性, 表明问题已修复。
Tomcat配置参数说明
开启HTST默认会将antiClickJackingEnabled属性设置为true,antiClickJackingOption设置为DENY,这会直接导致当前页面不允许以iframe窗体的形式显示在任何系统中。
下面分情况说明相关配置:
下面涉及的文件为web.xml文件
情况一:允许任意网站以iframe窗体形式引用
如果当前网页可以被任何页面以iframe窗体形式引用,可以直接将antiClickJackingEnabled属性设置为false即可。
<init-param>
<param-name>antiClickJackingEnabled</param-name>
<param-value>false</param-value>
</init-param>
情况二:允许部分网站以iframe窗体形式引用
如果只允许部分系统以iframe窗体形式引用当前网页,可以通过设置antiClickJackingOption的属性值,达到不同级别的控制。
antiClickJackingOption的属性值包括:
- DENY:页面不能被嵌入到任何iframe或者frame中
- SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中。
- ALLOW-FROM:页面只能被嵌入到指定域名的框架中。
如果允许当前网站可以被本网站嵌入到iframe或者frame中,将antiClickJackingOption设置为SAMEORIGIN。
<init-param>
<param-name>antiClickJackingEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>antiClickJackingOption</param-name>
<param-value>SAMEORIGIN</param-value>
</init-param>
如果要配置指定的网站才有权限可以嵌入当前页面,将antiClickJackingOption设置为ALLOW-FROM。同时配置antiClickJackingUri属性,设置被允许的网站地址。
下面示例表示允许baidu网站中可以嵌入当前页面。
<init-param>
<param-name>antiClickJackingEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>antiClickJackingOption</param-name>
<param-value>ALLOW-FROM</param-value>
</init-param>
<init-param>
<param-name>antiClickJackingUri</param-name>
<param-value>https://baidu.com/</param-value>
</init-param>