如何在tomcat / java webapps中配置HttpOnly cookie?
在阅读了Jeff关于保护你的Cookie的博客文章后:HttpOnly。我想在我的 Web 应用程序中实现 HttpOnly Cookie。
你如何告诉tomcat只使用http cookie进行会话?
在阅读了Jeff关于保护你的Cookie的博客文章后:HttpOnly。我想在我的 Web 应用程序中实现 HttpOnly Cookie。
你如何告诉tomcat只使用http cookie进行会话?
更新:这里的JSESSIONID内容仅适用于较旧的容器。请使用 jt 当前接受的答案,除非您使用的是< Tomcat 6.0.19 或 < Tomcat 5.5.28 或其他不支持 HttpOnly JSESSIONID cookie 的容器作为配置选项。
在应用中设置 Cookie 时,请使用
response.setHeader( "Set-Cookie", "name=value; HttpOnly");
但是,在许多Web应用程序中,最重要的cookie是会话标识符,它由容器自动设置为JSESSIONID cookie。
如果您只使用此 cookie,则可以编写一个 ServletFilter 来在退出时重新设置 Cookie,从而强制 JSESSIONID 使用 HttpOnly。http://keepitlocked.net/archive/2007/11/05/java-and-httponly.aspx http://alexsmolen.com/blog/?p=16 的页面建议在筛选器中添加以下内容。
if (response.containsHeader( "SET-COOKIE" )) {
String sessionid = request.getSession().getId();
response.setHeader( "SET-COOKIE", "JSESSIONID=" + sessionid
+ ";Path=/<whatever>; Secure; HttpOnly" );
}
但请注意,这将覆盖所有cookie,并且仅设置您在此过滤器中声明的内容。
如果您在 JSESSIONID Cookie 中使用其他 Cookie,则需要扩展此代码以设置筛选器中的所有 Cookie。在多 cookie 的情况下,这不是一个很好的解决方案,但对于仅 JSESSIONID 设置来说,这可能是一个可以接受的快速修复。
请注意,随着您的代码随着时间的推移而发展,当您忘记此过滤器并尝试在代码中的其他位置设置另一个cookie时,会有一个令人讨厌的隐藏错误等着您。当然,它不会被设置。
不过,这真的是一个黑客。如果你确实使用Tomcat并且可以编译它,那么看看Shabaz的优秀建议,将HttpOnly支持补丁到Tomcat中。