zoukankan      html  css  js  c++  java
  • 单例模式的漏洞,通过反射和序列化、反序列化来破解单例,以及如何避免这些漏洞

    (一)单例模式(以饿汉式为例)

       首先的话,看下面的代码:

        

    (二)通过反射来破解单例模式

        在看下面的代码

        

          看运行的结果:

          说明:打印出来的结果不一样,说明这2个对象就是不同的对象,这样就破解了单例模式

    (三)通过序列化和反序列化破解单例

       

          看运行效果:

        

           说明:打印出来的结果不一样,说明这2个对象就是不同的对象,这样就破解了单例模式

    (四)如何避免这些漏洞

      (1)避免反射

       说明:反射是通过它的Class对象来调用构造器创建出新的对象,我们只需要在构造器中手动抛出异常,导致程序停止就可以达到目的了,看下面代码:

        

          看运行效果:

        

          说明:这样就避免通过反射来调用构造器来破解单例

      (2)避免序列化

        看下面代码:

        

          运行效果:

            说明:这个方法是基于回调的,反序列化时,如果定义了readResolve()则直接返回此方法指定的对象,而不需要在创建新的对象!

  • 相关阅读:
    DRF资源分配算法
    DC/OS快速安装部署
    安装dcos cli
    DC/OS遇到的报错
    Apache-Shiro+Zookeeper系统集群安全解决方案之会话管理
    用Jenkins+Gradle+Jetty实现持续集成、测试、部署
    构建工具之
    Spring-MVC开发之全局异常捕获全面解读
    用Hbase存储Log4j日志数据:HbaseAppender
    SSIS连接-左外连接
  • 原文地址:https://www.cnblogs.com/shangxinfeng/p/6754345.html
Copyright © 2011-2022 走看看