☺️️近期我们正在更新一个新样式,希望你会喜欢!
Tomcat下如何利用过滤器来完成对cookie添加httponly或secure标识

httponly和secure两个标识是现代化浏览器对cookie安全保护的一大举措,我们来简单看下其作用。httponly是为了防护xss对cookie的劫持,在通用的攻击场景中,通过植入xss来劫持到管理者或用户的cookie,然后绕过应用的账户管控措施进入到操作页面完成非法的操作。secure是为了解决https与http间的问题,http是一种透明的传输,也就是说能看到明文,而https是具有加密的,secure的设置正是声明仅跟随https的请求,不答理http。

Tomcat下有一种好的通用解决措施就是过滤器来操作,举例如下,具体的业务情况请自行调整。

private void rewriteCookieToHeader(HttpServletRequest request, HttpServletResponse response) {
    if (response.containsHeader("SET-COOKIE")) {
        String sessionid = request.getSession().getId();
        String contextPath = request.getContextPath();
        String secure = "";
        if (request.isSecure()) {
            secure = "; Secure"; 
        }
        response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid
                         + "; Path=" + contextPath + "; HttpOnly" + secure);
    }
}

我们需要明白的是,使用request.isSecure()并不总是准确的,考虑到负载均衡技术为执行SSL加速,请求从浏览器到负载均衡器过来是HTTPS,而负载均衡器和实际服务器之间的请求可能会通过普通HTTP。这将导致request.isSecure()是假的,而浏览器确实使用SSL。

相关推荐:
先来聊聊为何会有这一么一回事。 在默认的部署下,可以直接通过DNS解析到部署的生产环境下,然后你的域名就能直接访问你的应 […]
异常详细信息: System.Web.HttpException: 无法向会话状态服务器发出会话状态请求。请确保已启动 […]
安装完tomcat8.x后,进入其目录/usr/local/tomcat/bin/,运行startup.sh,出现错误: […]
在 Linux 中为了安全起见,小于1024的端口都归root用户所有,其他用户没有使用这些端口的权限。 因此大量的新手 […]
<Server port="8005" shutdown="SHUTDOWN"> <!--属性说明 p […]
手机扫一扫即可带走我!