JAVA設置HttpOnly Cookies


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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM