java开发错误_每个Java开发人员都必须避免的9个安全错误

java开发错误

Checkmarx CxSAST是功能强大的源代码分析(SCA)解决方案,旨在从根本上识别,跟踪和修复技术和逻辑安全漏洞:源代码。 在这里查看 !

自从1995年中期引入Java以来​​,它已经走了很长一段路。 它的跨平台特性使其成为客户端Web编程的基准。 但是,由于网络犯罪的广泛使用和分发,其网络犯罪和黑客攻击已达到流行的程度,对安全Java开发的需求已成为当务之急。

卡巴斯基实验室最近的一份报告称, Java是最受攻击的编程语言,全球越来越多的黑客事件被报告。 Java的易感性很大程度上归因于其分段问题。 并非所有开发人员都在使用最新版本(Java 9),这基本上意味着并非总是应用最新的安全更新。

应用程序安全领域内越来越多的共识是,高代码完整性是确保应用程序健壮并不受顶级黑客技术攻击的最佳方法。 以下文章基于OWASP Java项目松散地包含9条建议,这是一项全面的工作,旨在帮助Java和J2EE开发人员生成可靠的应用程序。

每个Java开发人员都必须避免的9种编码应用程序错误做法

AppSec弊端1 –不限制对类和变量的访问

Java中公开的类,方法或变量基本上是对坏蛋的公开邀请。 确保所有这些默认情况下都设置为私有。 这将自动提高应用程序代码的健壮性,并阻塞潜在的攻击途径。 应使用访问器来限制可访问性,并且应明确记录非私有事物。

AppSec Malpractice 2 –取决于初始化

开发人员应该意识到,构造函数不是强制实例化Java对象的事实。 分配未初始化对象的替代方法的存在是必须解决的安全问题。 理想的解决方案是对类进行编程,以使对象在执行任何操作之前先验证初始化。

可以通过执行以下步骤来实现:

  • 所有变量都应设为私有。 外部代码应该只能通过安全的get和set方法访问这些变量。
  • 每个对象都应添加初始化的私有布尔变量。
  • 在执行任何操作之前,应使用所有非构造方法来验证初始化是否为true。
  • 如果要实现静态初始化程序,请确保所有静态变量都是私有的,并使用classInitialized。 就像上面提到的那样,静态初始化程序(或构造函数)必须在执行任何操作之前确保classInitialized为true。

AppSec Malpractice 3 –未完成课程

许多Java开发人员忘记使类(或方法)成为最终的。 这是一种不当行为,有可能使黑客以恶意方式扩展该类。 声明该类为非公共类并依赖于包范围限制来保证安全性可能会导致代价高昂。 您必须使所有类都最终定型,并在确实需要时记录未定型的类。

AppSec弊端4 –依赖包装范围

Java编程语言中中等严重性的另一个问题是使用软件包。 这些软件包将类,方法和变量放在一起,以方便访问,从而有助于开发过程。 但是,黑客可能会在您的程序包中引入流氓类,从而使他们能够访问和修改其中的数据。

因此,建议假定软件包未关闭且可能不安全。

AppSec弊端5 –尽量减少使用内部类的使用

传统的做法是将所有特权代码放入内部类中 ,这已被证明是不安全的。 Java字节码基本上没有内部类的概念,而内部类基本上只提供包级的安全性机制。 更糟糕的是,即使内部类被声明为私有,它也可以访问外部类的字段。

内部类可以减少Java应用程序代码的大小和复杂性,可以说使它的错误更少,效率更高。 但是可以通过将字节代码注入到程序包中来利用这些类。 最好的方法是不要完全使用内部类,但要确保将它们定义为私有类,就像外部类一样。

AppSec弊端6 –硬编码

Java开发人员犯下的最常见的安全错误之一就是敏感信息的硬编码。 此编程错误涉及在代码内插入敏感密码,用户ID,PIN和其他个人数据。 敏感信息应存储在开发树中受保护的目录中。

AppSec恶意行为7 –允许将敏感数据回显到UI

java.io包没有方法来确保对敏感数据的保护。 JDK默认随附的keytool应用程序会回显用户输入。 Java开发人员应确保为所有按键(通常为“ *”)显示固定的字符。 例如,可以在Swing GUI应用程序中使用javax.swing.JPasswordField

AppSec错误做法8-不注意类别的可克隆性

Java中可用的克隆机制使黑客能够创建您定义的类的新实例。 可以执行此操作而无需任何构造的执行。 安全的Java开发基本上是将对象变成不可克隆的对象。 这可以通过以下代码来实现:

appsecmalpractices-1

如果您想走克隆路线,可以通过使用final关键字来实现压倒性免疫。 LOC看起来像下面的代码片段:

appsecmalpractices-2

AppSec Malpractice No.9 –过度进行序列化和反序列化

Java具有使对象序列化的机制(反之亦然)。 通常在“关闭” Java虚拟机(JVM)时用于保存对象。 但这是不安全的做法,因为攻击者随后可以访问对象的内部并非法获取私有/敏感属性。 writeobject方法可用于防止序列化。

appsecmalpractices-3

开发人员不应序列化敏感数据,因为那样的话,它将不受Java虚拟机(JVM)的控制。 如果没有解决方法,则应对数据进行加密。

反序列化也是如此,反序列化用于从字节流构造对象。 恶意攻击者可以尝试模仿合法类,并使用此技术来实例化对象的状态。 可以使用类似于writeobject的技术来防止反序列化。 如下所示,此安全方法称为readobject

appsecmalpractices-4

安全SDLC和静态代码分析(SCA)

不幸的是,即使是最安全的开发准则和规则也不足以确保Java应用程序代码完美无缺。 开发人员的错误以及开发期间对代码进行的众多更改最终导致应用程序代码中的漏洞和漏洞。 但是组织应该能够尽快检测到这些。

当今市场上有各种各样的应用程序安全解决方案可用,每种解决方案都具有其独特的功能和优势。 但是理想的解决方案应该提供全面的功能集,并应集成到软件开发生命周期(SDLC)的所有阶段中,如果可能的话,可以实现自动测试以获得最佳结果。

属于静态应用程序安全测试(SAST)方法论的静态代码分析(SCA)就是这样一种解决方案。 此技术的好处很多。 它们包括:

  • 创建安全的SDLC(sSDLC) –通过将扫描解决方案集成到开发的所有阶段,甚至可以在构建完成之前就扫描应用程序代码。 测试源代码可以及早缓解漏洞,并显着加快开发过程。
  • 多功能性 – SCA可以无缝地融合到几乎任何开发环境和模型中。 这可以是传统的Waterfall方法或持续集成(CICD)模型。由于其快速的扫描速度和准确的结果,该测试解决方案在敏捷和DevOps环境中也有效。
  • 最佳的缓解性能 – SCA具有独特的功能,可以向开发人员显示代码中所检测到的漏洞的确切位置,从而可以快速有效地进行修复。 该安全解决方案还扫描具有广泛框架兼容性的多种编程和脚本语言。
  • 范围广泛的漏洞 – SCA涵盖了广泛的问题–从应用程序层漏洞一直到编码漏洞。 甚至可以进行高级分析。 例如,可以通过扫描源代码来检测业务逻辑缺陷。 这为组织和开发人员提供了全面的安全解决方案。
  • 投资回报(ROI) –总结起来,早期漏洞检测可以大大缩短补救时间并加快开发速度。 这有助于避免延迟,并最大程度地减少了占用大量资源的维护程序的需求。 换句话说,组织可以节省大量时间和金钱。

当开发人员和安全部门齐头并进并采取上述步骤时,就可以实现Java应用程序的安全性。 尽管开发人员可以并且应该实践安全的编码并生成具有高度完整性的代码,但是CISO和安全人员应该实施正确的解决方案,以尽早地消除漏洞和漏洞。

只有各方积极参与的方法才能帮助组织创建安全的应用程序。

Checkmarx CxSAST是功能强大的源代码分析(SCA)解决方案,旨在从根本上识别,跟踪和修复技术和逻辑安全漏洞:源代码。 在这里查看 !

翻译自: https://www.javacodegeeks.com/2015/05/9-security-mistakes-every-java-developer-must-avoid.html

java开发错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言中常用的标准库函数有哪些?

点击蓝字关注我们标准头文件包括&#xff1a;<asset.h> <ctype.h> <errno.h> <float.h> <limits.h> <locale.h> <math.h> <setjmp.h> <signal.h> <stdarg.h> <…

计算机考试一级考试基础知识,全国计算机等级考试一级msoffice基础知识

全国计算机等级考试一级msoffice基础知识导语&#xff1a;在日常生活中&#xff0c;媒体(Medium &#xff0c;复数形式为Media )是指文字、声音、图像、动画和视频等内容。多媒体(Multimedia )是指能够同时对两种或两种以上媒体进行采集、操作、编辑、存储等综合处理的技术。多…

2008铁路旅客列车时刻表_天津到新沂汽车卧铺大巴车长途汽车发车时刻表

长途大巴网上需要注意什么&#xff01;选择乘坐大巴&#xff0c;是大家出行时的一个好选择&#xff0c;而且长途大巴网上也 很方便&#xff0c;能让大家节省不少的时间&#xff0c;但是网上有许多的要求&#xff0c;可能大家还不清楚。小编就给大家 介绍下长途大巴网上须知。长…

web ua检测_UA Web挑战会议:针对初创公司的SpringIO

web ua检测在本周&#xff0c;我在“后端”部分的UA Web挑战会议上发表了讲话。 我在演讲中选择了一个奇怪的话题-“面向初创企业的SpringIO”。 结果是什么&#xff1f; 我将在下面总结。 在过去三年中&#xff0c;我开发了各种个人Web项目。 我再也没有称它们为“初创公司”…

手把手教你撸一个线程池 - C++版

点击蓝字关注我们前面的文章在手把手教你写 C 语言线程池中&#xff0c;已经实现了 C 语言版的线程池&#xff0c;如果我们也学过 C 的话&#xff0c;可以将其改为 C 版本&#xff0c;这样代码不管是从使用还是从感观上都会更简洁一些。对这些代码做从 C 到 C 的迁移主要用到了…

备忘录怎么用红笔标注_错题本的正确打开方法,你用对了吗?

相信很多考生都会有自己的错题本&#xff0c;可是并不是每个考生的错题本都起到了作用。那么错题本究竟如何做才可以切实可用又可以做的好呢&#xff1f;大禹未来教育收集整理了相关内容&#xff0c;分享给大家&#xff01;1、制作错题本的步骤步骤一&#xff1a;把所有的练习册…

组装台式计算机需要哪些配件,组装电脑需要哪些配件 电脑装机教程图解

DIY电脑一直都是电脑爱好者非常喜欢的&#xff0c;对于电脑爱好者来说&#xff0c;通过自己动手DIY组装电脑&#xff0c;不仅可以更为深刻的认识硬件&#xff0c;了解电脑主机内部结构&#xff0c;还能够学习到安装系统等知识&#xff0c;从中可以带来很多乐趣。今天我们为大家…

C语言代码优化的实用方法大总结

点击蓝字关注我们1、选择合适的算法和数据结构选择一种合适的数据结构很重要&#xff0c;如果在一堆随机存放的数中使用了大量的插入和删除指令&#xff0c;那使用链表要快得多。数组与指针语句具有十分密切的关系&#xff0c;一般来说&#xff0c;指针比较灵活简洁&#xff0c…

怎么取消苹果手机自动续费_手机腾讯视频的vip怎么取消自动续费?

如果是安卓手机直接在腾讯视频的【个人中心】找到【我的VIP会员】即可选择【管理自动续费】取消自动续费。如果是苹果手机需要在Apple ID中找到【订阅】选项&#xff0c;取消订阅即可。以下是详细介绍&#xff1a;1、如果您是安卓手机直接点击进入【腾讯视频】的应用&#xff0…

计算机专业去荷兰还是瑞典,给申请计算机专业的同学几点建议

计算机专业想来是广大美国研究生申请的热门专业&#xff0c; 这里所说的热门&#xff0c;不光指招生人数多&#xff0c; 就业前景优势也是无容置疑的。广大申请者的硬件条件无外乎分为以下几种情况&#xff1a;1、托福80&#xff0c;GRE 3002、托福90 GRE3153、托福100&#xf…

为何某些公司不允许使用C++STL

点击蓝字关注我们最初开始禁用 C STL&#xff0c;是因为早期项目编码实践中留下的惯例&#xff0c;被后来的程序员继承下来。老项目中这种选择尤其地多。不过如果有人将其上升到公司行为在不同项目中全面禁用 STL&#xff0c;则没有必要&#xff0c;而且我倾向于做这种决定的人…

支持向量机python代码_Python中的支持向量机SVM的使用(有实例)

除了在Matlab中使用PRTools工具箱中的svm算法&#xff0c;Python中一样可以使用支持向量机做分类。因为Python中的sklearn库也集成了SVM算法&#xff0c;本文的运行环境是Pycharm。 一、导入sklearn算法包 skleran中集成了许多算法&#xff0c;其导入包的方式如下所示&#xff…

C++ 23将引入标准库模块支持,编译速度提升10倍

点击蓝字关注我们虽然模块是 C 20 的主要卖点&#xff0c;但与 C 20 不同的是&#xff0c;C 23 的标准库也将实现模块化。从标准库开始&#xff0c;模块有望改善编译速度和 C 开发者组织代码的方式。C 是丹麦计算机科学家 Bjarne Stroustrup 创建的编程语言&#xff0c;由 ISO …

python刷题_11.学习Python,刷题才能让你感受到快(差)乐(距)!

猜数字游戏可用一个简单的while循环来实现。 其中 随机数 的生成在第4篇介绍过&#xff0c; 键盘输入在上一篇介绍过 import random result round(random.random()*100) while result ! guess: guess int(input()) if guess>result: print(大了!) elif guess print(小了!)…

java jigsaw_Java 9和Project Jigsaw如何破坏您的代码

java jigsawJava 9迫在眉睫&#xff0c;它将带有完整的Project Jigsaw 。 在我从OpenJFX邮件列表的最近讨论中得知它可能会破坏现有代码之前&#xff0c;我并没有对此给予太多关注。 这对于Java非常不寻常&#xff0c;因此引起了我的兴趣。 我阅读了该项目的JEP和一些相关文章…

C语言的万能“三板斧”

点击蓝字关注我们作为嵌入式工程师&#xff0c;写一个效率高效&#xff0c;思路清晰的C语言程序是我们的终极目标。那么&#xff0c;怎样才能写好这样的程序呢&#xff1f;首先&#xff0c;我们要用C语言的思维方式来进行程序的构架构建&#xff1b;其次&#xff0c;要有良好的…

aws sqs_在Spring中将AWS SQS用作JMS提供程序

aws sqs最近AWS公布了新的客户端库&#xff0c;它实现了JMS 1.1规范 &#xff0c;并使用他们的简单队列服务 &#xff08;SQS&#xff09;作为JMS提供者 &#xff08;见杰夫巴尔的帖子在这里 &#xff09;。 在我的文章中&#xff0c;我将向您展示如何设置Maven项目以使用Sprin…

openmv串口数据 串口助手_STM32 串口接收不定长数据 STM32 USART空闲检测中断

编者注&#xff1a;单片机串口接收不定长数据时&#xff0c;必须面对的一个问题为&#xff1a;怎么判断这一包数据接收完成了呢&#xff1f;常见的方法主要有以下两种&#xff1a;1.在接收数据时启动一个定时器&#xff0c;在指定时间间隔内没有接收到新数据&#xff0c;认为数…

java 多线程性能_Java中多线程的性能比较

java 多线程性能Java中有多种用于多线程的技术。 可以通过同步关键字&#xff0c;锁或原子变量来并行化Java中的一段代码。 这篇文章将比较使用synced关键字ReentrantLock&#xff0c;getAndIncrement&#xff08;&#xff09;以及执行get&#xff08;&#xff09;和compareAnd…

C语言贪吃蛇小游戏 | 源码

点击蓝字关注我们该程序已经在VS2019上验证过了&#xff0c;可以直接运行。程序目录程序里就只有一个test.cpp文件&#xff0c;也就是说大家可以先创建工程&#xff0c;然后直运行效果C语言学习资源汇总【最新版】源码#include<stdio.h> #include<stdlib.h> #inclu…