返回顶部
首页 > 资讯 > 精选 >Java单例模式的攻击与防御怎么理解
  • 220
分享到

Java单例模式的攻击与防御怎么理解

2023-06-02 21:06:21 220人浏览 薄情痞子
摘要

这篇文章主要介绍“Java单例模式的攻击与防御怎么理解”,在日常操作中,相信很多人在Java单例模式的攻击与防御怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java单例模式的攻击与防御怎么理解”的疑

这篇文章主要介绍“Java单例模式的攻击与防御怎么理解”,在日常操作中,相信很多人在Java单例模式的攻击与防御怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java单例模式的攻击与防御怎么理解”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

说到“单例模式被攻击”这个话题,大家最容易想到的可能就是通过序列化/反序列化来攻击单例模式,因为一个对象实例序列化再反序列化后,得到的新的对象虽然各字段内容和原字段一致,然而对象地址和原始对象地址相比已经发生了变化,因此它们是两个不同的对象。

上面的结论完全正确,然而除了序列化/反序列化,单例模式还可能遭受另一种方式的攻击,即反射攻击(Reflection attack)。

看一个具体例子:

public class JerrySingleton {   private String name;   private JerrySingleton(){   name = "Jerry";}private static class SingletonHolder{      private static final JerrySingleton INSTANCE = new JerrySingleton();}public static JerrySingleton getInstance() {      return SingletonHolder.INSTANCE;      }}

Java单例模式的攻击与防御怎么理解

上面是一个饿汉式单例。

Java单例模式的攻击与防御怎么理解

然而我只需要将这个单例类JerrySingleton的构造函数通过反射设置成可以访问Accessible,然后就能通过反射调用该构造函数,进而生成新的对象实例。这样就破坏了单例模式。

Class<?> classType = JerrySingleton.class;Constructor<?> c = classType.getDeclaredConstructor(null);c.setAccessible(true);JerrySingleton e1 = (JerrySingleton)c.newInstance();JerrySingleton e2 = JerrySingleton.getInstance();System.out.println(e1 == e2);

Java单例模式的攻击与防御怎么理解

第6行代码会打印false。

针对这种攻击,一种可行的防御措施是在单例类的构造函数内定义一个布尔变量,初始化为false。当构造函数执行后,该变量被置为true。如果接下来构造函数再次被执行,则人为抛出异常,避免构造函数重复执行。

public class JerrySingletonImproved {    private static boolean flag = false;    private JerrySingletonImproved(){         synchronized(JerrySingletonImproved.class) {            if(flag == false) {                  flag = !flag;            }      else {              throw new RuntimeException("Singleton violated");      }  }}}

Java单例模式的攻击与防御怎么理解

这种防御措施无法从根本上杜绝Singleton被攻击,因为攻击者仍旧可以通过反射来修改布尔变量flag的值,从而绕过这个检查。

最理想的不会受到攻击的单例模式实现是借助Java里枚举类Enumeration的特性:

Java单例模式的攻击与防御怎么理解

这种实现类型的单例模式的消费代码:

System.out.println("Name:" + JerrySingletonAnotherApproach.INSTANCE.getName());

如果攻击者通过前面介绍的反射代码对这种实现方式的单例进行攻击,jdk会抛出NoSuchMethodException异常:

Exception in thread "main" java.lang.NoSuchMethodException: singleton.JerrySingletonAnotherApproach.<init>()at java.lang.Class.getConstructor0(Class.java:3082)at java.lang.Class.getDeclaredConstructor(Class.java:2178)at singleton.SingletonAttack.test3(SingletonAttack.java:31)at singleton.SingletonAttack.main(SingletonAttack.java:43)

Java单例模式的攻击与防御怎么理解

究其原因,是因为现在我们是通过Java枚举方式实现的单例,枚举类没有传统意义上的构造函数,因此对这种反射攻击免疫。

到此,关于“Java单例模式的攻击与防御怎么理解”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Java单例模式的攻击与防御怎么理解

本文链接: https://lsjlt.com/news/231435.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java单例模式的攻击与防御怎么理解
    这篇文章主要介绍“Java单例模式的攻击与防御怎么理解”,在日常操作中,相信很多人在Java单例模式的攻击与防御怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java单例模式的攻击与防御怎么理解”的疑...
    99+
    2023-06-02
  • ABAP和Java单例模式的攻防
    ABAPCLASS zcl_jerry_singleton DEFINITIONPUBLICFINALCREATE PRIVATE .PUBLIC SECTION.INTERFACES&nb...
    99+
    2023-06-02
  • ABAP和Java里的单例模式攻击实例
    这篇文章主要讲解了“ABAP和Java里的单例模式攻击实例”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ABAP和Java里的单例模式攻击实例”吧!面向对象编程世界里的单例模式(Single...
    99+
    2023-06-04
  • Web中XSS攻击与防御的示例分析
    小编给大家分享一下Web中XSS攻击与防御的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Web安全之XSS攻防1. X...
    99+
    2024-04-02
  • DDOS攻击的方式有哪些及怎么防御
    这篇文章主要介绍“DDOS攻击的方式有哪些及怎么防御”,在日常操作中,相信很多人在DDOS攻击的方式有哪些及怎么防御问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”DDOS攻击的方式有哪些及怎么防御”的疑惑有所...
    99+
    2023-06-28
  • Java单例模式怎么理解
    这篇文章主要讲解了“Java单例模式怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java单例模式怎么理解”吧!一、设计模式概览1.1、软件设计模式的概念软件设计模式(Softwar...
    99+
    2023-06-22
  • 高防云服务器怎么防御大规模流量攻击
    高防云服务器防御大规模流量攻击的方法:1、高防数据中心会定期对现有网络主节点进行扫描,寻找可能存在的安全隐患并及时清理;2、高防服务器防火墙会主动识别过滤虚假流量或IP,降低由于网络恶意攻击带来的风险;3、高防云服务器自带高带宽优势,冗余性...
    99+
    2024-04-02
  • 高防服务器是怎么防御CC攻击的
    高防服务器防御CC攻击的方法有:1、高防服务器的服务商会定期扫描网络主节点,寻找可能存在的安全隐患并及时清理;2、高防服务器在骨干节点上采用了3D立体防御体系,基本能实现防御网络的任意攻击;3、高防服务器机房带宽冗余充足,能防御带宽消耗型的...
    99+
    2024-04-02
  • cdn加速高防是怎么防御DDOS攻击的
    cdn加速高防防御DDOS攻击的方法:1、通过智能化系统筛选用户访问来源,并让访问者连接到相应服务器,减少服务器压力;2、将网站流量...
    99+
    2023-02-08
    cdn加速高防 高防cdn cdn
  • SpringBoot防御CSRF攻击的流程及原理解析
    目录CSRF 原理CSRF实践CSRF防御前后端不分离方案前后端分离方案CSRF 就是跨域请求伪造,英文全称是 Cross Site Request Forgery。这是一种非常常见...
    99+
    2023-05-18
    SpringBoot 防御 CSRF 攻击 SpringBoot CSRF 攻击
  • 香港高防服务器怎么防御DDOS的攻击
    香港高防服务器防御DDOS攻击的方法:1、采用高性能的硬件防御设备,防御能力好;2、机房带宽大,能有效防御流量型攻击,保证网站的正常运行;3、有先进的防御策略,有更好的防御作用。具体内容如下:高性能的机房硬件防御设备香港机房采用的大多是防御...
    99+
    2024-04-02
  • 高防服务器是怎么防御网络攻击的
    高防服务器的防御方式:1.配置防火墙,当出现打规模的并发流量时,防火墙会自动进行流量的清洗以及负载均衡处理。2.保证网络带宽资源充足且给服务器配置大宽带。3.定期对网络节点进行扫描,找到存在的安全隐患并清理。4.在路由器上过滤掉假的IP,关...
    99+
    2024-04-02
  • 泉州高防服务器是怎么防御攻击的
    泉州高防御服务器的防御方法:1.定期扫描高防服务器。2.在骨干节点上配置防火墙。3.利用网络设备保护网络资源。4.过滤不需要的端口。5.使用足以抵御攻击的机器。具体内容如下:一、定期扫描网络骨干节点,发现可能存在的漏洞,可及时处理。网络骨干...
    99+
    2024-04-02
  • 香港服务器是怎么防御攻击的
    香港服务器防御攻击的方法:1、给香港服务器安装防火墙和攻击防护软件;2、使用CDN技术来隐藏香港服务器真实IP地址;3、部署香港高防服务器,提高服务器防御力;4、定期备份网站数据,避免服务器被攻击后无法恢复网站数据。具体内容如下:安装防火墙...
    99+
    2024-04-02
  • 美国高防云服务器怎么防御大规模流量攻击
    美国高防云服务器防御大规模流量攻击的方法:1、高防数据中心会定期对现有网络主节点进行扫描,寻找可能存在的安全隐患并及时清理;2、美国高防服务器防火墙会主动识别过滤虚假流量或IP,降低由于网络恶意攻击带来的风险;3、美国高防云服务器自带高带宽...
    99+
    2024-04-02
  • 韩国高防云服务器怎么防御大规模流量攻击
    韩国高防云服务器防御大规模流量攻击的方法:1、高防数据中心会定期扫描网络主节点,寻找并清理可能存在的安全隐患;2、韩国高防云服务器配...
    99+
    2023-02-08
    韩国高防云服务器 高防云服务器 云服务器
  • Java单例模式与破坏单例模式概念原理深入讲解
    目录什么是单例模式饿汉式(预加载)懒汉式(懒加载)反射破坏单例模式什么是单例模式 经典设计模式又分23种,也就是GoF 23 总体分为三大类: 创建型模式结构性模式行为型模式 Jav...
    99+
    2023-02-21
    Java单例模式 Java破坏单例模式
  • Java单例模式与破坏单例模式的概念是什么
    本文小编为大家详细介绍“Java单例模式与破坏单例模式的概念是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java单例模式与破坏单例模式的概念是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是单例...
    99+
    2023-07-05
  • 便宜的海外云主机怎么防御DDoS攻击
    便宜海外云主机防御DDoS攻击的方法:1、对海外云主机的总流量进行实时监控;2、选择配置高的海外云主机;3、提高警惕,定期对海外云主机进行安全排查;4、选择海外高防云服务器来部署网站,能有效提高云服务器的防御力。具体内容如下:1、监控器客户...
    99+
    2024-04-02
  • 便宜的海外云主机怎么防御cc攻击
    便宜的海外云主机防御cc攻击的方法:1、取消域名绑定来缓解CC攻击;2、修改海外云服务器网站的web端口进行防护;3、检测CC攻击的源IP地址,对其进行屏蔽或禁止访问;4、选择优质可靠的海外云服务器服务商,保障海外云服务器能够不间断运作。具...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作