Tensorflow 是一个基于 Python 的机器学习和人工智能项目,该项目由 Google 开发。近日 TensorFlow 已经放弃了对 YAML 的支持,以修复一个关键的代码执行漏洞。
YAML 或 YAML Ain’t Markup Language 是一种人类可读的数据序列化语言,用于在进程和应用程序之间传递对象和存储数据,许多 Python 应用程序都使用 YAML 来序列化和反序列化对象。
这个 YAML 反序列化漏洞的严重程度被评为 9.3 级,由安全研究员 Arjun Shibu 报告给 TensorFlow 维护者。
安全研究员 Arjun Shibu 表示,”我在 TensorFlow 中搜索了 Pickle 和 PyYAML 的反序列化模式,令人惊讶的是,我发现了对危险函数 yaml.unsafe_load() 的调用。”
众所周知,”unsafe_load” 函数可以对 YAML 数据进行相当自由的反序列化 —— 它解析了所有的标签,即使是那些不受信任的输入上已知不安全的标签。该函数直接加载 YAML 输入而不对其进行清理,这使得使用恶意代码注入数据成为可能。
序列化的使用在机器学习应用中非常普遍。训练模型是一个昂贵且缓慢的过程。因此,开发人员经常使用预先训练好的模型,这些模型已经存储在 YAML 或 TensorFlow 等 ML 库支持的其他格式中。
在该漏洞被披露后,TensorFlow 的维护者决定完全放弃对 YAML 的支持,而使用 JSON 进行反序列化。值得注意的是,TensorFlow 并不是第一个、也不是唯一一个被发现使用 YAML unsafe_load 的项目。该函数的使用在 Python 项目中是相当普遍的。
TensorFlow 的维护者表示,CVE-2021-37678 漏洞将于 TensorFlow 2.6.0 版本的更新中进行修复,并且还将被回传到之前的 2.5.1、2.4.3 和 2.3.4 版本。自年初以来,Google 已经在 TensorFlow 上修复了 100 多个安全漏洞。
本文标题:TensorFlow 因代码执行漏洞将弃用 YAML,推荐开发者改用 JSON
本文地址:
如何在 Linux 下检测内存泄漏
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。 内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 可以使用相应的软件测试工具对软件进行检测。 1. ccmalloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。 2. Dmalloc-Debug Malloc Library.3. Electric Fence-Linux分发版中由Bruce Perens编写的malloc()调试库。 4. Leaky-Linux下检测内存泄漏的程序。 5. LeakTracer-Linux、Solaris和HP-UX下跟踪和分析C++程序中的内存泄漏。 6. MEMWATCH-由Johan Lindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过gcc的precessor来进行。 7. Valgrind-Debugging and profiling Linux programs, aiming at programs written in C and C++.8. KCachegrind-A visualization tool for the profiling data generated by Cachegrind and Calltree.9. Leak Monitor-一个Firefox扩展,能找出跟Firefox相关的泄漏类型。 10. IE Leak Detector (Drip/IE Sieve)-Drip和IE Sieve leak detectors帮助网页开发员提升动态网页性能通过报告可避免的因为IE局限的内存泄漏。 11. Windows Leaks Detector-探测任何Win32应用程序中的任何资源泄漏(内存,句柄等),基于Win API调用钩子。 12. SAP Memory Analyzer-是一款开源的JAVA内存分析软件,可用于辅助查找JAVA程序的内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。 13. DTrace-即动态跟踪Dynamic Tracing,是一款开源软件,能在Unix类似平台运行,用户能够动态检测操作系统内核和用户进程,以更精确地掌握系统的资源使用状况,提高系统性能,减少支持成本,并进行有效的调节。 14. IBM Rational PurifyPlus-帮助开发人员查明C/C++、托管、Java和VB6代码中的性能和可靠性错误。 PurifyPlus 将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。 15. Parasoft Insure++-针对C/C++应用的运行时错误自动检测工具,它能够自动监测C/C++程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。 并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。 能作为Microsoft Visual C++的一个插件运行。 16. Compuware DevPartner for Visual C++ BoundsChecker Suite-为C++开发者设计的运行错误检测和调试工具软件。 作为Microsoft Visual Studio和C++ 6.0的一个插件运行。 17. Electric Software GlowCode-包括内存泄漏检查,code profiler,函数调用跟踪等功能。 给C++和开发者提供完整的错误诊断,和运行时性能分析工具包。 18. Compuware DevPartner Java Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。 19. Quest JProbe-分析Java的内存泄漏。 20. ej-technologies JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。 它把cpu、执行绪和内存的剖析组合在一个强大的应用中。 JProfiler可提供许多IDE整合和应用服务器整合用途。 JProfiler直觉式的GUI让你可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。 4.3.2注册码:A-G666#F-1olm9mv1i5uuly#. BEA JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。 22. SciTech Software AB Memory Profiler-找到内存泄漏并优化内存使用针对C#,,或其它程序。 23. YourKit & Java Profiler-业界领先的Java和程序性能分析工具。 24. AutomatedQA AQTime-AutomatedQA的获奖产品performance profiling和memory debugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, Compaq 和 GNU编译器。 可以为和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。 支持 1.0,1.1,2.0,3.0和Windows 32/64位应用程序。 25. JavaScript Memory Leak Detector-微软全球产品开发欧洲团队(Global Product Development- Europe team, GPDE) 发布的一款调试工具,用来探测JavaScript代码中的内存泄漏,运行为IE系列的一个插件。
【八喜小子】java中什么是泛型?它有什么样的好处??

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。 对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。 泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
java.lang.ClassCastException怎么解决
1. 打开我们的开发工具myeclispe,然后点击File,选择New,在点击Java Project选项来新建个java工程项目;2. 这里新建了三个java类。 一个是BaiDu类作为父类,一个JingYan类作为子类。 还有一个AesTest类是来测试结果的;3. 在父类中,就定义一个name属性。 在类里,我们是先继承了BaiDu这个类,然后又定义了个Cname属性,如下图所示。 代码如下:public class BaiDu {String name = baidu;}public class JingYan extends BaiDu {String Cname = jingyan;}4. 在类里面写上测试代码,代码如下:public static void main(String[] args) {BaiDu baidu = new BaiDu();JingYan jingyan = new JingYan();jingyan = (JingYan) baidu;(jingyan);}这里注意,把定义的baidu赋值给jingyan,由于类型不一致,所以要进行类型强制转化,用JingYan这个类来进行强制转换,5. 写好后,就可以执行这段代码了,执行发现报错。 报错的意思就是强制类型转换异常,6. 接着,在修改下代码,代码如下:public static void main(String[] args) {BaiDu baidu = new BaiDu();JingYan jingyan = new JingYan();baidu = (BaiDu)jingyan;(baidu);}这里是把jingyan赋值给baidu,由于类型不一致,所以要进行类型强制转化,用BaiDu这个类来进行强制转换,修改好后,再来执行,发现此时可以正常运行,输出想要的结果。 ava是一种可以撰写跨平台应用软件的面向对象的程序设计语言。 Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 Java分为三个体系:1.分别为Java SE(J2SE,Java2 Platform Standard Edition,标准版),(J2EE,Java 2 Platform, enterprise Edition,企业版), ME(J2ME,Java 2 Platform Micro Edition,微型版)。
发表评论