關於解決綠盟科技安全評估報告中的web漏洞
3.1.1.Apache Tomcat 文件包含漏洞(CVE-2020-1938)
方式一:升級tomcat版本,
對於springboot項目,需要更換內置tomcat
更換步驟:
1 進入springboot共成的parent可以看到tomcat的版本
2 在自己的pom文件里覆蓋掉內置的tomcat版本
::: details 點擊查看代碼
<tomcat.version>9.0.31</tomcat.version>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<!--排除依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
:::
效果:
3 啟動項目看一下
沒有報錯,修改成功
若不需要使用Tomcat AJP協議,可直接關閉AJP Connector,或將其監聽地址改為僅監聽本機localhost。
具體操作:
(1)編輯 <CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 為 Tomcat 的工作目錄):
<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />
(2)將此行注釋掉(也可刪掉該行):
<!--<Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />-->
(3)保存后需重新啟動Tomcat,規則方可生效。
3.1.2.檢測到會話cookie中缺少HttpOnly屬性
由於在報告中明確的指出了是哪個接口 找到接口添加如下配置
cookie.setHttpOnly(true);
3.1.3.點擊劫持:X-Frame-Options未配置
tomcat配置
進入tomcat目錄下的conf,找到web.xml配置文件,搜索httpHeaderSecurity
,
找到如下配置:
修改后結果:
::: details 點擊查看代碼
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<async-supported>true</async-supported>
<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>
</filter>
:::
修改之后,重啟項目
瀏覽器訪問接口可以看到:
即配置成功
這里有一個問題
配置http的響應頭信息:屬性名X-Frame-Options。
可以配置的參數有兩個:
DENY:瀏覽器拒絕當前頁面加載任何Frame頁面。
SAMEORIGIN:頁面只能加載入同源域名下的頁面。
我配置的是第二個 但是訪問接口卻是第一個,不知道是什么原因。
springBoot項目
對於springBoot項目,可以使用添加過濾器的方式解決
::: details 點擊查看代碼
/**
* @Description: 解決 點擊劫持:X-Frame-Options未配置
* @Param:
* @return:
* @Date: 2020/7/24
*/
@Component
public class CookieFrameFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
resp.addHeader("x-frame-options", "SAMEORIGIN");
filterChain.doFilter(req, resp);
}
@Override
public void destroy() {
}
}
:::
修改后重啟項目
配置成功
注意需要添加@Component
注解,使改過濾器交由spring管理,否則不生效