首页 文章 精选 留言 我的

精选列表

搜索[AI影响],共10005篇文章
优秀的个人博客,低调大师

IBM报告:居家办公对SaaS安全有什么影响?

根据IBM Security发布的《2020年数据泄露成本报告》,各行业中云的使用量增加了50%。针对云服务(主要是针对Office 365等团队协作服务)的威胁数量已增加630%。 有75%的受访者表示,由于新冠疫情的大流行,很多组织开始采用远程工作,发现数据泄露或从数据泄露中恢复的时间大大增加了。如果组织在开始的30天内发现违规行为可以节省超过100万美元,但报告显示实际的平均响应时间高达280天。 因为远程工作的逐渐普及,SaaS应用程序也被攻击者盯上了。未经过安全培训的员工在异地办公,访问权限的控制和敏感数据的访问都变得更加复杂,也增加了数据暴露和泄露的风险。 因此,增强SaaS的安全水平对当今企业的安全至关重要,可以参考Gartner定义的SaaS安全状态管理(SSPM)提高SaaS应用程序安全性。 Gartner的Tom Croll表示:“越来越多的业务关键数据被完全存在于公司网络外部的应用程序进行处理,这使传统的控制措施失效了”,“我们需要新的方式来应对这些挑战,SSPM工具将会进一步增强对存储在常用SaaS应用程序中的数据的保护。核心功能包括监视本地SaaS安全设置的配置、报告不合规情况和自动修复违规情况,以保持与多个合规性框架的一致性”。 新兴解决方案 云安全领域已有很多产品,但是SSPM解决方案是唯一一种以定制和自动化方式评估公司的SaaS安全状况的解决方案,该解决方案针对每个SaaS应用程序进行了定制化应对,用以持续监视和增强公司的SaaS安全性。 但我们不能因此忽略基础安全防护,SaaS应用程序安全始终包含两个方面:SaaS应用程序服务提供商内置了旨在保护公司和用户数据的许多安全功能,但本地的安全超出了这些服务提供商的控制范围,组织内部的安全团队仍然要负责保护和管理数据、配置、用户角色和权限等。 对于组织而言,确保正确配置所有SaaS应用程序、用户角色和权限不仅是一项永无休止、耗时费力的工作,而且是一项不可能完成的任务。 管理SaaS安全的挑战 SaaS应用程序的环境是动态且不断更新的,例如在添加或删除员工以及启用新应用程序之后,必须重置、更改或更新权限和配置。同时,组织需要满足法律合规和行业标准以及一些最佳实践(NIST,MITRE等)。对于平均拥有288个SaaS应用程序的企业而言,这需要耗费大量的人力物力。 每个SaaS应用程序都有自己的安全配置,例如可以共享哪些文件,是否需要MFA,是否在视频会议中允许录制等。安全团队需要了解每个应用程序对应的规则和配置,确保它们符合公司的策略要求。而安全团队并不是每天使用应用程序的人,也难以优化配置。 组织需要管理/监视的应用程序、配置、用户角色和权限的数量随应用程序的数量增长而快速增加。例如一个拥有数百个SaaS应用程序的企业,每个应用程序最多可能有数百个配置选项,更不用说拥有数千到数十(甚至数十万)员工的大企业。安全团队要学习数百种应用程序设置,并监视成千上万的设置以及成千上万的用户角色与权限。 大多数SaaS应用程序是在使用它们最多的部门购买的,例如,自动化SaaS解决方案通常位于营销部门中,CRM位于销售部门中,而IT部门中则包含云计算,生产力和协作工具。这些SaaS应用程序可能会分散保存着有关公司客户和业务项目的关键数据,难以统一管理。 SaaS 应用程序的使用者通常没有接受过安全培训,对持续不断的配置需求也没有深入了解。安全团队最终对其所采用的安全协议一无所知,更重要的是,使用者也并未将注意力集中在其带来的风险上。 SaaS安全 因为远程办公的增加,组织更容易受到SaaS安全配置缺陷的攻击。幸运的是,安全团队现在可以使用Adaptive Shield之类的SSPM解决方案来规范化SaaS应用程序安全解决上述挑战。 在关键业务SaaS应用程序中,合理的SSPM解决方案可以为公司的SaaS安全状况提供更好的可见性与更为及时的补救措施。 SSPM解决方案旨在简化和提高安全团队的效率,减少安全团队的工作量和工作压力,同时增加对潜在风险或违规行为的防护。 Adaptive Shield类的SSPM解决方案使安全团队可以轻松地查看、监控和修复公司所有SaaS应用程序的配置信息和用户角色信息,同时管理不同种类的SaaS应用程序(例如:视频会议平台、客户支持工具、人力资源管理系统、文件共享应用程序、消息传递应用程序、营销平台等)。

优秀的个人博客,低调大师

Javac 常量传播对类初始化的影响

一、Java Compiler 虚拟机运行java类时,需要将类进行初始化,一般来说,java代码在虚拟机中执行,至少需要2次编译(至少的原因是,”解释器+JIT“可能反复动态优化编译)。Javac是java compiler在编译时优化代码编译器。 javac优化手动实际上是相对保守的:基本上是简单的常量传播、无用代码擦除等有限手段。 二、类的加载与卸载过程 类的加载过程: 加载->验证->准备->解析->初始化->使用 触发条件: (不考虑JIT分支预测):new对象(实际是invokespecial),getstatic/putstatic(读写类中的非常量成员 + 读final修饰的引用类型,注意:引用类型不包括字面量字符串),invokestatic 反射调用 类的卸载过程: 卸载(GC 回收:常量符号引用解除、内存回收) 触发条件(同时满足以下三条): 不存在类的静态引用类型成员字段和方法没有被其他类引用 不存在类的实例 类的classloader已被销毁 三、类的加载案例 package com.apptest; public class Base { static { System.out.println("Base init"); } public static final int A = 123; public static int B = 123; } package com.apptest; public class Child extends Base { static { System.out.println("Child init"); } } 测试代码 package com.apptest; public class ClassLoadTest { public static void main(String[] args) { System.out.println("Child.A="+ Child.A +" :::不会触发基类加载,不会触发子类加载"); System.out.println("Child.B="+ Child.B +" :::会触发基类加载,结果在本段之前执行,不会触发子类加载"); Child[] ch = null; System.out.println("Child[] ch=null;" + " :::不会触发子类加载"); ch = new Child[1]; System.out.println("ch = new Child[1]: "+" :::不会触发子类加载"); System.out.println("Child[].class基类: "+Child[].class.getSuperclass()); System.out.println("Child.class="+Child.class +" :::不会触发子类加载"); Child c = new Child(); //子类正式加载 } } 运行结果如下 Child.A=123 :::不会触发基类加载,不会触发子类加载 Base init Child.B=123 :::会触发基类加载,结果在本段之前执行,不会触发子类加载 Child[] ch=null; :::不会触发子类加载 ch = new Child[1]: :::不会触发子类加载 Child[].class基类: class java.lang.Object Child.class=class com.apptest.Child :::不会触发子类加载 Child init 【1】 Child.A 不仅没有触发子类加载,连父类也没加载,原因是因为A虽然是成员,但是Javac会根据final修饰符和A变量指向常量两个原因,对代码段扫描替换为常量符号引用,进行常量传播优化。 【"Child.A="+ Child.A +" :::不会触发基类加载,不会触发子类加载" 】 编译后会是 【"Child.A=123 :::不会触发基类加载,不会触发子类加载"】 如果A指向的不是常量,是会触发父类加载的,比如将A做如下修改 public static final String A = new String("AA"); 【2】Child.B 触发了父类初始化,但没有触发子类初始化,主要原因是,虽然B成员指向常量,但因为程序运行不确定性,可能被其他线程修改,因此无法进行常量传播。 Child.B字符串代码段会被StringBuilder通过append进行连接,而读取Child.B 使用的getstatic,会触发对父类的加载 GETSTATIC com/apptest/Child.B : I 为什么只触发的是父类的初始化,主要原因是父类和子类的静态成员包括方法,在子类中如果没有进行覆盖,直接指向父类,而GETSTATIC促使Child类只是被加载了,但并没有初始化。 【3】 Child[] ch = null; 因为是无用代码,会被javac擦除,因此可以直接不用讨论 【4】new Child[]; 虽然是Child数组,但Java中,数组的夫类是Object,而Child[].class本身和Chil.class是两个类,不需要讨论 【5】Child.class 这个相比有些特殊,Child.class是比较特殊的静态常量,同样也是只读(final),但是Child.class实际上是Child类的实例化,类本身是抽象概念 ,而Child.class只是Child类中的一个常量,实际使用是Child child = new Child(); 而不是Child.class child = new Child.class[]; 此外,在java class header中,它的classpoint也不是指向Child的,因此和类只是描述关系。 我们可以查看类文件信息 Last modified 2021-4-17; size 473 bytes MD5 checksum f74b5478553ce99742e1bdf9ef84a625 Compiled from "Child.java" public class com.apptest.Child extends com.apptest.Base minor version: 0 major version: 51 flags: ACC_PUBLIC, ACC_SUPER Constant pool: #1 = Methodref #6.#17 // com/apptest/Base."<init>":()V #2 = Fieldref #18.#19 // java/lang/System.out:Ljava/io/PrintStream; #3 = String #20 // Child init #4 = Methodref #21.#22 // java/io/PrintStream.println:(Ljava/lang/String;)V #5 = Class #23 // com/apptest/Child #6 = Class #24 // com/apptest/Base #7 = Utf8 <init> #8 = Utf8 ()V #9 = Utf8 Code #10 = Utf8 LineNumberTable #11 = Utf8 LocalVariableTable #12 = Utf8 this #13 = Utf8 Lcom/apptest/Child; #14 = Utf8 <clinit> #15 = Utf8 SourceFile #16 = Utf8 Child.java #17 = NameAndType #7:#8 // "<init>":()V #18 = Class #25 // java/lang/System #19 = NameAndType #26:#27 // out:Ljava/io/PrintStream; #20 = Utf8 Child init #21 = Class #28 // java/io/PrintStream #22 = NameAndType #29:#30 // println:(Ljava/lang/String;)V #23 = Utf8 com/apptest/Child #24 = Utf8 com/apptest/Base #25 = Utf8 java/lang/System #26 = Utf8 out #27 = Utf8 Ljava/io/PrintStream; #28 = Utf8 java/io/PrintStream #29 = Utf8 println #30 = Utf8 (Ljava/lang/String;)V { public com.apptest.Child(); descriptor: ()V flags: ACC_PUBLIC Code: stack=1, locals=1, args_size=1 0: aload_0 1: invokespecial #1 // Method com/apptest/Base."<init>":()V 4: return LineNumberTable: line 3: 0 LocalVariableTable: Start Length Slot Name Signature 0 5 0 this Lcom/apptest/Child; static {}; descriptor: ()V flags: ACC_STATIC Code: stack=2, locals=0, args_size=0 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3 // String Child init 5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return LineNumberTable: line 5: 0 line 6: 8 } SourceFile: "Child.java" 从#5我们知道了Child.class是Child类的常量。 此外,我们还有一种方式来证明,Child.class和Child指向的父类并不是同一个 System.out.println(ClassLayout.parseInstance(Child.class).toPrintable()); System.out.println(ClassLayout.parseInstance(new Child()).toPrintable()); System.out.println(ClassLayout.parseInstance(new Child()).toPrintable()); ava.lang.Class object internals: OFFSET SIZE TYPE DESCRIPTION VALUE 0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1) 4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0) 8 4 (object header) bf 03 00 f8 (10111111 00000011 00000000 11111000) (-134216769) 12 4 java.lang.reflect.Constructor Class.cachedConstructor null 16 4 java.lang.Class Class.newInstanceCallerCache null 20 4 java.lang.String Class.name (object) 24 4 (alignment/padding gap) 28 4 java.lang.ref.SoftReference Class.reflectionData null 32 4 sun.reflect.generics.repository.ClassRepository Class.genericInfo null 36 4 java.lang.Object[] Class.enumConstants null 40 4 java.util.Map Class.enumConstantDirectory null 44 4 java.lang.Class.AnnotationData Class.annotationData null 48 4 sun.reflect.annotation.AnnotationType Class.annotationType null 52 4 java.lang.ClassValue.ClassValueMap Class.classValueMap null 56 32 (alignment/padding gap) 88 4 int Class.classRedefinedCount 0 92 404 (loss due to the next object alignment) Instance size: 496 bytes Space losses: 36 bytes internal + 404 bytes external = 440 bytes total Child init com.apptest.Child object internals: OFFSET SIZE TYPE DESCRIPTION VALUE 0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1) 4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0) 8 4 (object header) 05 c2 00 f8 (00000101 11000010 00000000 11111000) (-134168059) 12 4 (loss due to the next object alignment) Instance size: 16 bytes Space losses: 0 bytes internal + 4 bytes external = 4 bytes total com.apptest.Child object internals: OFFSET SIZE TYPE DESCRIPTION VALUE 0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1) 4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0) 8 4 (object header) 05 c2 00 f8 (00000101 11000010 00000000 11111000) (-134168059) 12 4 (loss due to the next object alignment) Instance size: 16 bytes Space losses: 0 bytes internal + 4 bytes external = 4 bytes total 由结果可知,后面2个实例的class point(-134168059)和Child.class class point是不同的 【6】正常逻辑,使用new触发了invokespecial,而invokespecial执行的前提是父类必须初始化。 四、类的加载过程前置 我们从第二个分段“类的加载与卸载过程”中知道,触发类的加载给人的错觉是字节码必须执行到指定的位置,实际上“解释器+JIT”可能会进行分支预测、逃逸分析等,对类提前加载,注意:这个加载会停留在初始化阶段之前。 为了证明这个行为,我们利用ClassLoader进行Hook public class DelegateClassLoader extends URLClassLoader { private ClassLoader mPathClassLoader; private DelegateClassLoader(String dexPath,ClassLoader parentClassLoader) { super(new URL[0],parentClassLoader); mPathClassLoader = getClass().getClassLoader(); } //PathClassloader.parent <- PathClassloader ====> PathClassloader.parent <- Hook ClassLoader <- PathClassloader public static synchronized void hook(ClassLoader pathClassLoader) throws NoSuchFieldException, IllegalAccessException { ClassLoader classLoader = new DelegateClassLoader("",pathClassLoader.getParent()); Field parentField = ClassLoader.class.getDeclaredField("parent"); parentField.setAccessible(true); parentField.set(pathClassLoader,classLoader); Thread.currentThread().setContextClassLoader(classLoader); } @Override protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { return super.loadClass(name, resolve); } @Override protected Class<?> findClass(String name) throws ClassNotFoundException { System.out.println("HOOK " + name ); return super.findClass(name); } } 测试 public class ClassLoadTest { public static void main(String[] args) { try { DelegateClassLoader.hook(ClassLoadTest.class.getClassLoader()); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } System.out.println("-------------------"); System.out.println("" + Child.B); System.out.println("-------------------"); System.out.println("" + new Child()); } } 执行结果如下 ------------------- HOOK com.apptest.Child HOOK com.apptest.Base Base init 123 ------------------- Child init com.apptest.Child@1540e19d

优秀的个人博客,低调大师

云计算对医疗保健行业的影响

云计算提供了增强的数据安全性,简化了数据处理,提供了高质量的医疗护理,并提供了经济高效的解决方案。云计算带来了诸多好处,它已经涉足医疗保健行业,并且正在不断增长。英国广播公司日前发布的一份研究报告指出,到2022年,全球医疗领域在云计算方面的支出预计将达到350亿美元,复合年增长率将提高15%。到2025年,云计算医疗市场的规模预计将达到550亿美元。 以下将深入了解什么是基于云计算的医疗保健系统以及它是如何工作的。 什么是基于云计算的医疗保健系统? 云计算提供了计算资源(如数据存储)的按需可用性。云平台作为互联网上可用的数据中心,分布在多个位置并由中央服务器控制。它可以轻松存储数据,并可以随时从任何设备进行访问。 医疗保健行业中的云服务是指集成云计算技术以开发和管理基于云计算的医疗保健解决方案。基于云计算的解决方案通过按需访问提供了巨大的存储资源,这是传统医疗保健系统无法实现的。它还支持医院人力资源系统(HER)、图像和基因组数据分载的大型数据集。云服务还提供了医生和其他医疗保健提供者之间的轻松数据共享,并允许他们远程访问数据。此外,它提供了有关诊断信息的分析和监视,并提高了整体性能。 云计算在医疗保健领域如何运作? 以下步骤显示了医疗保健行业基于云计算架构的工作流程: 步骤1:患者请求授权 包括患者和第三方(例如药品制造商和药房等)在内的外部用户使用公共云服务。用户使用用户名和密码登录,并发出访问云服务的授权请求。 步骤2:将请求转发到私有云网络 该请求在公共云上进行处理,并转发到私有云上的身份和访问控制服务。 步骤3:请求和回应 该请求被接受或拒绝。如果被接受,则将其转发到医疗保健私有云应用程序服务器。如果请求被拒绝,则会发送一条通知消息,说明拒绝请求的原因。 步骤4:医生请求授权 医生是内部用户,可以登录到私有云服务,并向身份和访问控制发送包括用户名和密码的授权请求。 步骤5:请求响应 医生对数据的访问请求是从云计算应用服务器处理的。在身份验证成功后,私有云将处理该请求,并允许医生从公共云应用程序服务器访问数据。 步骤6:在临床云平台上处理数据 一旦访问了数据,医生将提供注释,并更新医疗保健数据。临床云平台将处理并更新健康信息。 步骤7:向患者发送医疗建议 医生可以直接将处方或医疗建议方面的反馈发送给患者。 步骤8:将信息更新到临床云计算服务器中 一旦医生向患者发送医疗建议,其信息就会更新到临床云计算服务器系统中。 步骤9:患者收到通知 患者通过通知服务了解最新的医疗数据状况。这些信息通过临床服务器传递到公共云网络的身份和访问控制服务器。一旦收到通知,患者就可以访问通过医生端发送的最新医疗信息。 结论 基于云计算的医疗保健解决方案对于公共卫生以及发生灾难时都是有意义的。基于云计算的解决方案的主要目标是通过改进医疗系统和有效的患者护理来减轻医护人员的繁重工作。在采用云计算技术方面,医疗保健行业一直处于最前沿。许多大型医疗机构已经开始使用基于云计算的定制解决方案,为患者提供全面的优质医疗服务。

优秀的个人博客,低调大师

5G对未来军事的影响有多大?

5G最先应用的场景,就是军用通信方面,从1G到4G,并不是简单的加了1个G那么简单,而是每次都是成10倍成百倍的网速提高,这样的提高,对于需要大容量通讯能力的军用装备来说,自然是网速越快越好,带宽越大越好。这对于美军自上世纪末提出"网络中心战"来说,就意味着每个节点都能够更快捷的接收到敌情通报,更快捷的将战场信息共享给每个战场内的节点。例如前沿观察的士兵可以更加快速的将敌前信息上传至预警机、卫星和后方的控制枢纽,驱逐舰发射的巡航导弹也能够更快的接收到目标信息。也能够更好的进行路径规划和计算,从而更准确更快速的打击敌军目标。 5G技术并不仅仅是应用在军用通讯领域,更重要的是应用于目前方兴未艾的人工智能领域。更快的计算速度、更迅畅的通讯能力,更大的存储能力,都带给了无人装备更多的可能。随着无人机、无人坦克、无人作战舰艇等更多的被世界各国研制出来,也带来了无人作战系统的各种升级换代。例如无人机变成了无人机蜂群,更强大的操作处理系统可以让无人机变成群体,也可以将5G技术与人工智能进行融合,制造出类似于电影《绝密飞行》里那样的bug级的无人作战飞机。如今已经有了X-47这样的无人机,想必如果再进一步,全面智能的无人机或作战机器人就有可能被制造出来,当然,就看"军事伦理学"上能否通过或者是人们有没有那个意愿了。 除了更加强大的无人作战装备,5G技术带来的好处还有虚拟现实技术的增强。过去,人们在训练的时候,往往需要找一块相对拟真的环境来进行训练,而如今随着5G技术的到来,VR模拟就可以代替现实的场景,对作战可能遇到的场景进行高度模拟。增强现实技术可以快速转换场景,即免去了寻找现实场景的麻烦,也免去了假想敌部队苦思冥想如何制作拟真场景的麻烦。当然,5G和VR技术想要代替真正的战场还是不太可能的,只能最大限度的降低部队训练的经费和麻烦,节省一些训练的弹药。想要贴近实战,还是要到真刀真枪的训练场上经历风雨才行。 5G技术最重要的应用,其实应该是网络战,随着传统的海陆空越来越多的依赖是使用网络技术,网络空间的对抗已经成了世界各大军事强国所最看重的制高点。如果说以前杜黑的《制空权》决定了从二战以来,谁拥有了制空权,谁就拥有了战役乃至战争的主动权,那么未来谁赢得了网络技术的制高点,谁就能赢得未来战争的主动权。谁能瘫痪对方的网络,谁就能让对方措手不及,更让对方耳不聪目不明,从而为夺取最后胜利取得先机。从这点来看,5G技术的制高点,是无论如何也要争取的,于民用还是于军用,都是必须要将核心技术牢牢掌控在自己手中的。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册