2015-10-07 71 views
2

我在Spring Security上使用表单身份验证。所以我去我的登录表单,输入我的用户名和密码,然后我可以访问我网站上的受保护资源。与基本身份验证不同,使用form authentication时,仅在第一个请求上发送用户名和密码。Spring Security Form Authentication:如何跟踪会话?

我不明白的是Spring Security Servlet如何跟踪最终用户对后续请求的影响?

据我所知,与basic-authenticationServlet只能在头中查找编码的用户名&密码。但是这与form authentication有什么关系?

我假设某种会话变量设置?如果是这样,那是什么?

Spring Security是否有某种临时数据库将会话ID链接到用户名?最重要的是,如果我不使用CSRF token,攻击者需要做的就是知道这个会话变量来冒充用户吗?

回答

2

验证后,Spring Security添加一个名为SPRING_SECURITY_CONTEXT的会话属性。

此会话属性存储在服务器内存中,并通过JSESSIONID cookie与您的浏览器相关联。

它包含一个SecurityContextImpl的实例,其中包含一个UsernamePasswordAuthenticationToken,其中包含用户名。

Spring安全性是否有某种临时数据库将会话ID链接到用户名?

是的,服务器端会话就像数据库一样。在每个请求中,服务器将根据JSESSIONID cookie的值查找您的会话属性。

如果我不使用CSRF令牌,那么攻击者需要做的就是知道这个会话变量来模拟用户吗?

没有CSRF保护,攻击者可以通过让用户使用他们的站点并向站点发出请求(通过JS或Flash或不是)来模拟用户。

如果使用HTTP基本认证,您的网站同样容易受到CSRF的影响。

始终在您网站上的任何重要表单上使用CSRF保护。你为什么不呢?