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