1. 程式人生 > >安全問題-Cookie未設定HttpOnly&&Cookie未設定Secure標識

安全問題-Cookie未設定HttpOnly&&Cookie未設定Secure標識

阿里機測的系統漏洞(懶得打字,給報告部分截圖):
在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

問題解決:

過濾器處理一下就行了

CookieFilter.java

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet Filter implementation class CookieFilter
 * 
 * 解決 Cookie未設定HttpOnly  &&  Cookie未設定Secure標識  問題
 * 
 * @author xiaheshun
 */
public class CookieFilter implements Filter {

    /**
     * Default constructor. 
     */
    public CookieFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest)request; 
		HttpServletResponse resp = (HttpServletResponse)response;
		Cookie[] cookies = req.getCookies();
		if (cookies != null) {
			for (Cookie cookie : cookies) {
				String value = cookie.getValue();
				StringBuilder builder = new StringBuilder();
				builder.append(cookie.getName()+"="+value+";");
				builder.append("Secure;");//Cookie設定Secure標識
				builder.append("HttpOnly;");//Cookie設定HttpOnly
//				Calendar cal = Calendar.getInstance();
//				cal.add(Calendar.HOUR, 1);
//				Date date = cal.getTime();
//				Locale locale = Locale.CHINA;
//				SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss",locale);
//				builder.append("Expires="+sdf.format(date));
				resp.addHeader("Set-Cookie", builder.toString());
				
			}
			
		}
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

web.xml

<!--xiaheshun 阿里雲檢測漏洞問題   解決   Cookie設定HttpOnly  &&  Cookie設定Secure標識  -->
	<filter>
		<filter-name>cookieFilter</filter-name>
		<filter-class>com.hxptp.filter.CookieFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>cookieFilter</filter-name>
	    <url-pattern>/*</url-pattern>
	</filter-mapping>

解決成果:

此處不列舉自己公司的截圖,用蘑菇街的截圖。

在這裡插入圖片描述

可能遇到的小小坑…也可能就我碰到的。

在設定Set-Cookie的時候,用addHeader,如果用setHeader的話,就只是設定一個cookie值得頭資訊限制,其實在平時會有很多cookie裡的主要引數資訊需要限制,有的訊息也會有不同的瀏覽器可以儲存的時間,所有要一個一個遍歷出來設定Cookie的資訊。

程式碼中有設定過期時間的,註釋掉了,需要的時候,可以拿出來用。