还有三天就是除夕了,新的一年会不会好起来呢。
因为有了新的目标和方向,我这漫无目的的休假以及离职休息结束了。
shiro记住密码反序列化
影响版本
shiro-core <=1.2.4
任何泄露rememberMe
的AES加密密钥的版本,均存在
原理
https://issues.apache.org/jira/browse/SHIRO-550
shiro对RememberMe类型传递的cookie序列化数据未做过滤,导致了反序列化漏洞的产生。在此过程中,由于shiro-core <=1.2.4 AES的加解密秘钥存在硬编码问题,导致直接生成Cookie被利用。
修复
针对这个问题shiro解决了自带的硬编码的问题,当然如果用户还是用硬编码的方式,一旦key泄漏,一样是会造成反序列化的问题。
官方针对这个问题的修复方式:
1、删除相关默认密钥
2、如果没有配置密钥,会随机生成一个密钥。
嗯,shiro只是把秘钥做了更改修复,可以找找其他的反序列化漏洞利用链。
关于shiro的简单学习
shiro
apache shiro是一个强大的且易用的Java安全框架,它执行身份验证、授权、加密和会话管理。使用Shiro易于理解的API,您可以快速轻松地保护任何应用程序—从最小的移动应用程序到最大的web和企业应用程序。
Apache Shiro从设计的第一天起就支持任何应用,从最小的命令行应用到最大的web集群应用。尽管在这个教程中我们创建了一个简单的app,但这些方式也在其他地方也同样适用。
Github:https://github.com/apache/shiro
简单学习
shiro三大核心组件:
Subject
, 一般指“用户”,泛指所有与之交互的对象。在权限管理的应用程序里往往需要知道谁能够操作什么,谁拥有操作该程序的权利,shiro中则需要通过Subject来提供基础的当前用户信息,Subject 不仅仅代表某个用户,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。
SecurityManager
, 用于管理所有的Subjectshiro的核心类,用于调度各种Shiro框架的服务。Realms:用户的信息认证器和用户的权限认证器,由我们实现Realms来自定义权限管理规则。
函数式编程
函数是面向过程的程序设计的基本单元,而函数式编程(function Programming)其思想更接近数学计算。
而数学上的计算越抽象离计算机硬件越远,执行效率就低。
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量。由于函数内部变量状态不确定,输入输出不确定,这种称为有副作用的。
函数式编程最早是数学家阿隆佐·邱奇研究的一套函数变换逻辑,又称为Lambda Calculus。