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