java過濾器給Cookie加上HttpOnly屬性
阿新 • • 發佈:2018-12-16
網上擼下來的程式碼登入不了…
公司安全掃描出的漏洞之一,看到的第一步就是各種百度,但是簡單複製貼上過來的程式碼連登入都登入不上了… 尷尬;然後發現貌似cookie的Name和value沒有對應上,需要改一點點…
而且原始碼的doFilter(request, response)在cookies!=null裡邊的,導致wsdl介面全部調不通…
直接貼程式碼片
/**
* 執行過濾,設定cookie為HttpOnly
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
// TODO Auto-generated method stub
//轉為HttpServletResponse來addHeader
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
Cookie[] cookies = req.getCookies();
if (cookies!=null){
for(Cookie cookie : cookies){
StringBuilder builder = new StringBuilder();
/*將cookie拼湊起來,網上那一步不能登入,是name寫死了...*/
builder.append(cookie.getName() +"=" + cookie.getValue() + "; ");
builder.append("Secure; ");
builder. append("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));
//System.out.println("Set-Cookie="+builder.toString());
resp.addHeader("Set-Cookie", builder.toString());
}
}
//這個要寫在外面,不然沒有cookies的請求會傳不過去
filterChain.doFilter(request, response);
}
希望安全掃描改的東西能全部通過啊…
小白無力…
後續
這個過濾器真是坑啊,在老ie6下面登入不上… 後臺會set-cookie,過濾器也會set-cookie一次,2個值還不一樣… 結果就是GG了… 不知道為什麼360的相容模式和其他瀏覽器還是可以的…
暫時先加了個header提高相容性。
resp.setHeader(“P3P”,“CP=CAO PSA OUR”);
把"JSESSIONID".equals(cookie.getName())的剔出來單獨處理。