zoukankan      html  css  js  c++  java
  • spring security防御会话伪造session攻击

    1. 攻击场景

    session fixation会话伪造攻击是一个蛮婉转的过程。

    比如,当我要是使用session fixation攻击你的时候,首先访问这个网站,网站会创建一个会话,这时我可以把附有jsessionid的url发送给你。

    http://unsafe/index.jsp;jsessionid=1pjztz08i2u4i
            

    你使用这个网址访问网站,结果你和我就会公用同一个jsessionid了,结果就是在服务器中,我们两人使用的是同一个session。

    这时我只要祈求你在session过期之前登陆系统,然后我就可以使用jsessionid直接进入你的后台了,然后可以使用你在系统中的授权做任何事情。

    简单来说,我创建了一个session,然后把jsessionid发给你,你傻乎乎的就使用我的session进行了登陆,结果等于帮我的session进行了授权操作,结果就是我可以使用一开始创建的session进入系统做任何事情了。

    与会话伪造的详细信息可以参考http://en.wikipedia.org/wiki/Session_fixation

    2. 解决会话伪造

    解决session fix的问题其实很简单,只要在用户登录成功之后,销毁用户的当前session,并重新生成一个session就可以了。

    Spring Security默认就会启用session-fixation-protection,这会在登录时销毁用户的当前session,然后为用户创建一个新session,并将原有session中的所有属性都复制到新session中。

    如果希望禁用session-fixation-protection,可以在http中将session-fixation-protection设置为none。

    <http auto-config='true'>
    	<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
    	<intercept-url pattern="/**" access="ROLE_USER" />
    	<session-management session-fixation-protection="none"/>
    </http>
            

    session-fixation-protection的值共有三个可供选择,none,migrateSession和newSession。默认使用的是migrationSession,如同我们上面所讲的,它会将原有session中的属性都复制到新session中。上面我们也见到了使用none来禁用session-fixation功能的场景,最后剩下的newSession会在用户登录时生成新session,但不会复制任何原有属性。

  • 相关阅读:
    [Swift]LeetCode241. 为运算表达式设计优先级 | Different Ways to Add Parentheses
    [Swift]LeetCode240. 搜索二维矩阵 II | Search a 2D Matrix II
    使用ADO.NET对SQL Server数据库进行訪问
    JavaScript中面向对象那点事
    总结文件操作函数(二)-C语言
    UVa
    深入研究java.lang.Object类
    TCP/IP具体解释--TCP/IP可靠的原理 滑动窗体 拥塞窗体
    W5500EVB UDP模式的測试与理解
    仿新浪首页、主题、详情页,纯html静态页面
  • 原文地址:https://www.cnblogs.com/wenjieyatou/p/6118585.html
Copyright © 2011-2022 走看看