session id 安全性问题
最一般的方法是自己管理session id
1. 用户login后,在后台加密出一个accessToken,并返回给用户。
2. 客户端接收到accessToken,可以将它存起来,web的话可以存在session storage,手机也可以保存accessToken,用于单点登录。
3. 同时,服务器会保存一份accessToken的相关信息在服务器,如:deviceId,IP,accessToken,loginTime,logoutTime,userId,userAgent等等。
3. 每次请求API都会将accessToken提交给服务器,服务器比较accessToken,看是否正确是否超时,如果成功就执行业务。
用Spring Security(适合CMS)
1. session id 由Spring Security创建。
2. 然后发送给客户端,然后保存在浏览器的cookie中。
3. 每次请求都将cookie发送到服务器,然后检查正确性和是否超时。
4. 这种方法要在Tomcat设置httponly和secure。(防止XSS攻击)
HttpOnly:
如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。
配置:
tomcat/conf/ 下找到context.xml修改<Context useHttpOnly="true">
secure
当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。
配置:(一般和HTTPS的证书一起使用)
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/usr/local/tomcat7/server.keystore"
keystorePass="Envisi0n" />