北京建设工程质量协会网站,潍坊mip网站建设,wordpress根据地方调整运费,建设银行 网站设置密码简介
https://openjdk.org/jeps/290
Filter Incoming Serialization Data过滤传入的序列化数据
JEP290是Java官方提供的一套来防御反序列化的机制#xff0c;其核心在于提供了一个ObjectInputFilter接口#xff0c;通过设置filter对象#xff0c;然后在反序列化#xff…简介
https://openjdk.org/jeps/290
Filter Incoming Serialization Data过滤传入的序列化数据
JEP290是Java官方提供的一套来防御反序列化的机制其核心在于提供了一个ObjectInputFilter接口通过设置filter对象然后在反序列化ObjectInputStream#readObject的时候触发filter的检测
JEP 290 在 JDK 9 中加入但在 JDK 6,7,8 一些高版本中也添加了
Java? SE Development Kit 8, Update 121 (JDK 8u121)Java? SE Development Kit 7, Update 131 (JDK 7u131)Java? SE Development Kit 6, Update 141 (JDK 6u141)处理
我这里的JDK是 8u202版本
ObjectInputStream
对于ObjectInputStream类来说主要的过滤方法为filterCheck 根据注释我们知道这个方法主要是当序列化过滤器不为空的时候触发该过滤器
其中反序列化过滤器就为serialFilter属性值跟进一下 这是一个ObjectInputFilter接口根据注释我们知道从流中读取类的类描述符和类的过滤器可以不进行配置
我们看看该类的构造方法 默认会对serialFilter属性进行赋值操作跟进ObjectInputFilter.Config.getSerialFilter()方法的调用 获取的是ObjectInputFilter中的内部静态类Config的serialFilter属性
跟下来回到filterCheck方法的分析 首先就会判断是否具有serialFilter这个过滤器如果不为空将会调用过滤器的checkInput方法进行过滤处理传入了clazz / arrayLength / depth等信息 这个方法返回的是一个ObjectInputFilter.Status这是一个枚举类型 接下来回到filterCheck方法
如果返回的状态为null/REJECTED两个之一将会抛出异常
所以对于过滤器的设置我们可以通过创建一个ObjectInputFilter实例并重写他的checkInput方法在其中实现我们的过滤逻辑之后通过调用ObjectInputStream#setInternalObjectInputFilter进行为stream添加过滤器 ObjectInputFilter$Config
在这个类中存在有一个静态代码块 在调用该类的时候就会为serialFilter属性赋值跟进到configuredFilter属性的来源 主要是获取jdk.serialFilter属性值之后通过调用createFilter方法进行过滤器的创建
跟进一下createFilter方法的调用 这个方法将会调用ObjectInputFilter.Config.Global.createFilter方法进行创建
ObjectInputFilterConfigConfigConfigGlobal
接着上面的分析我们跟进该类的createFilter方法 将传入的JEP规则字符串var0传入Global内部静态类的构造方法中创建了一个Golbal对象进行返回所以前面在ObjectInputStream类的构造方法中主要是为serialFilter赋值的是一个Global类
查看官方文档我们知道JEP 290的编写规则为 如果模式以“”开头如果模式的其余部分匹配则该类被拒绝否则被接受 如果模式包含“/”则“/”之前的非空前缀是模块名称。如果模块名称与类的模块名称匹配则剩余模式与类名称匹配。如果没有“/”则不比较模块名称。 如果模式以“.**”结尾则它匹配包和所有子包中的任何类 如果模式以“.*”结尾它匹配包中的任何类 如果模式以“*”结尾它匹配任何以该模式为前缀的类。 如果模式等于类名则匹配。 否则状态未定 If the pattern starts with “!”, the class is rejected if the rest of the pattern matches, otherwise it is accepted If the pattern contains “/”, the non-empty prefix up to the “/” is the module name. If the module name matches the module name of the class then the remaining pattern is matched with the class name. If there is no “/”, the module name is not compared. If the pattern ends with “.**” it matches any class in the package and all subpackages If the pattern ends with “.*” it matches any class in the package If the pattern ends with “*”, it matches any class with the pattern as a prefix. If the pattern is equal to the class name, it matches. Otherwise, the status is undecided. 接下来看看Global构造方法中是如何进行解析的 首先是通过传入的规则var1将其根据;进行分割并初始化filters属性为ArrayList数组 首先判断是否以*结尾进而判断是否是.*结尾如果是以!开头的话成功匹配的话将会通过lambada的格式调用this.filters.add将Status放置于filters属性中这里举个例子就行了后面就也就是同样的格式进行filters属性的添加
我们看看filters属性是个什么东西 这是一个函数列表
这样成功设置了过滤器当我们调用的时候将会调用
ObjectInputStream#filterCheckObjectInputFilter$Config$Global#checkInput主要是根据遍历filters属性通过反序列化的类进行获取对应的Status状态
过滤器
全局过滤器
通过前面的分析我们可以知道在ObjectInputFilter$Config类中属性configuredFilter中获取了jdk.serialFilter属性值这里就是全局过滤器
对于该属性值的设置有两种方式 配置JVM的jdk.serialFilter 配置%JAVA_HOME%\conf\security\java.security中的jdk.serialFilter字段
局部过滤器
同样有着两种方法进行设置 在创建ObjectInputStream对象之后通过调用其setInternalObjectInputFilter方法进行设置 又或者是调用Config#setObjectInputFilter方法进行设置
中的jdk.serialFilter字段
局部过滤器
同样有着两种方法进行设置 在创建ObjectInputStream对象之后通过调用其setInternalObjectInputFilter方法进行设置 又或者是调用Config#setObjectInputFilter方法进行设置
最后
分享一个快速学习【网络安全】的方法「也许是」最全面的学习方法 1、网络安全理论知识2天 ①了解行业相关背景前景确定发展方向。 ②学习网络安全相关法律法规。 ③网络安全运营的概念。 ④等保简介、等保规定、流程和规范。非常重要
2、渗透测试基础一周 ①渗透测试的流程、分类、标准 ②信息收集技术主动/被动信息搜集、Nmap工具、Google Hacking ③漏洞扫描、漏洞利用、原理利用方法、工具MSF、绕过IDS和反病毒侦察 ④主机攻防演练MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础一周 ①Windows系统常见功能和命令 ②Kali Linux系统常见功能和命令 ③操作系统安全系统入侵排查/系统加固基础
4、计算机网络基础一周 ①计算机网络基础、协议和架构 ②网络通信原理、OSI模型、数据转发流程 ③常见协议解析HTTP、TCP/IP、ARP等 ④网络攻击技术与网络安全防御技术 ⑤Web漏洞原理与防御主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作2天 ①数据库基础 ②SQL语言基础 ③数据库安全加固
6、Web渗透1周 ①HTML、CSS和JavaScript简介 ②OWASP Top10 ③Web漏洞扫描工具 ④Web渗透工具Nmap、BurpSuite、SQLMap、其他菜刀、漏扫等 恭喜你如果学到这里你基本可以从事一份网络安全相关的工作比如渗透测试、Web 渗透、安全服务、安全分析等岗位如果等保模块学的好还可以从事等保工程师。薪资区间6k-15k。
到此为止大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗
想要入坑黑客网络安全的朋友给大家准备了一份282G全网最全的网络安全资料包免费领取 扫下方二维码免费领取
有了这些基础如果你要深入学习可以参考下方这个超详细学习路线图按照这个路线学习完全够支撑你成为一名优秀的中高级网络安全工程师
高清学习路线图或XMIND文件点击下载原文件
还有一些学习中收集的视频、文档资源有需要的可以自取 每个成长路线对应板块的配套视频 当然除了有配套的视频同时也为大家整理了各种文档和书籍资料工具并且已经帮大家分好类了。 因篇幅有限仅展示部分资料需要的可以【扫下方二维码免费领取】