JAVA設置HttpOnly Cookies

httponly是微軟對cookie做的擴展。這個主要是解決用戶的cookie可能被盜用的問題。

那HttpOnly就是在設置cookie時接受這樣一個參數,一旦被設置,在瀏覽器的document對象中就看不到cookie了。

 

HttpOnly Cookies是一個cookie安全行的解決方案。

在支持HttpOnly cookies的瀏覽器中(IE6+,FF3.0+),如果在Cookie中設置了"HttpOnly"屬性,那麼通過JavaScript腳本將無法讀取到Cookie信息,這樣能有效的防止XSS攻擊,讓網站應用更加安全。

 

但是J2EE4,J2EE5 的Cookie並沒有提供設置 HttpOnly 屬性的方法,所以如果需要設置HttpOnly屬性需要自己來處理。

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

/**
 * Cookie工具類
 */
public class CookieUtil {

    /**
     * 設置HttpOnly Cookie
     * @param response HTTP響應
     * @param cookie Cookie對象
     * @param isHTTPOnly 是否爲HttpOnly
     */
    public static void addCookie(HttpServletResponse response, Cookie cookie, boolean isHttpOnly) {
        String name = cookie.getName();//Cookie名稱
        String value = cookie.getValue();//Cookie值
        int maxAge = cookie.getMaxAge();//最大生存時間(毫秒,0代表刪除,-1代表與瀏覽器會話一致)
        String path = cookie.getPath();//路徑
        String domain = cookie.getDomain();//域
        boolean isSecure = cookie.getSecure();//是否爲安全協議信息 

        StringBuilder buffer = new StringBuilder();

        buffer.append(name).append("=").append(value).append(";");

        if (maxAge == 0) {
            buffer.append("Expires=Thu Jan 01 08:00:00 CST 1970;");
        } else if (maxAge > 0) {
            buffer.append("Max-Age=").append(maxAge).append(";");
        }

        if (domain != null) {
            buffer.append("domain=").append(domain).append(";");
        }

        if (path != null) {
            buffer.append("path=").append(path).append(";");
        }

        if (isSecure) {
            buffer.append("secure;");
        }

        if (isHttpOnly) {
            buffer.append("HTTPOnly;");
        }

        response.addHeader("Set-Cookie", buffer.toString());
    }

}

 

值得一提的是,Java EE 6.0 中 Cookie已經可以設置HttpOnly了,所以如果是兼容 Java EE 6.0 的容器(例如如 Tomcat 7),可以直接使用Cookie.setHttpOnly 的方法來設置HttpOnly: 

cookie.setHttpOnly(true);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章