Java安全编码:糟糕的在线建议和令人困惑的APIs

简介:

对于程序员和软件开发人员来说,网络论坛提供了一个交流知识和寻找具体编码难题答案的好地方。遗憾的是,他们并不总是准确信息的来源。



弗吉尼亚理工大学的一组研究人员分析了数百篇关于Stack Overflow的文章,(Stack Overflow是一个很受欢迎的开发者论坛或者说Q&A网站)发现许多提供答案的开发人员并没有意识到编码选项的安全含义,并显示出了缺乏网络安全培训。

 

他们发现的另一件事是,有时,最热门的帖子或答案包含了一些不安全的建议,这些建议会在软件中引入安全漏洞,而正确的修复程序不那么受欢迎,也不容易看到,因为它们是用户提供的,其信誉分数较低。

 

因此,提问者和回答者之间的社会动态肯定会对人们的安全选择产生影响。




获得正确的安全性

 

研究人员集中研究与Java安全性相关的帖子,从软件工程和安全角度考虑,针对的是Spring Security的问题上发表的文章,Spring Security是一个第三方Java框架,为企业应用程序提供身份验证、授权和其他安全特性。


Spring Security旨在促进安全编码,但很明显,许多程序员发现它的APIs过于复杂,文档记录不足,运行时系统的错误报告令人困惑。



“此外,多语言支持获取数据的能力相当弱。在安全应用程序中,多语言的情况是很常见的,因为通常数据是用一种编程语言加密的(比如:Python)并在另一个编程语言解密(例如:Java)。这些问题会严重阻碍开发人员的生产力。”


开发人员在花太多时间解决APIs的正确用法时常感到沮丧,并且常常选择了完全不安全的修补程序,比如使用过时的加密哈希函数,禁用了跨站点请求伪造保护,信任了HTTPS验证中的所有证书,或者使用了过时的通信协议。


研究人员指出:“这些糟糕的编码实践,如果在生产代码中使用,将严重损害软件产品的安全性。”

 


建议每个人都参与


“这项工作的意义在于,我们为大量令人担忧的安全编码问题提供了经验证据,而这些问题之前并没有被报道过。这些问题是由于各种原因,包括企业安全应用的快速增长,软件开发人员缺乏安全培训,以及设计了糟糕的安全库,”研究人员指出。


他们建议设计人员删除或弃用弱安全性的APIs,设计简化的APIs,并在默认情况下实现强大的安全性防御,并设计干净且有帮助的错误报告接口,其中还包括可能的根本原因和解决方案。


另一方面,开发人员绝对应该需要安全检查,并进行安全测试,以检查实现的功能是否如预期的那样工作。在Stack Overflow和其他类似的社区网站和论坛上流行和接受的答案应该像一粒盐,如果可能的话,它们的准确性应该是独立的。


最近的相关研究显示,排名靠前但不够充分的编程Web教程也将漏洞引入了软件。


最后,工具生成器应该考虑使它们能够自动诊断安全错误,并建议安全补丁或解决方案。


“构建漏洞防御技术,比较同级应用程序使用相同系列的APIs来推断和警告潜在的错误使用。探索检查和加强安全性相关注释、代码和配置之间的语义一致性的方法。构建新的方法来转换声明性安全性和编程式安全性的实现,”研究人员总结道。



小编总结:当程序员或者软件开发者在编码遇到难题时,找网络论坛,或寻大神求助,或自己探索都是可行的,但一定要意识到编码选项的安全性,选择了错误的编码,将严重影响企业软件产品,因此,安全编码,人人有责。


本文由阿里聚安全编译自https://www.helpnetsecurity.com/2017/10/03/secure-coding-java/

相关文章
|
Shell Linux API
【Shell 命令集合 磁盘维护 】Linux 查找指定目录下的所有符号链接文件 symlinks 命令使用教程
【Shell 命令集合 磁盘维护 】Linux 查找指定目录下的所有符号链接文件 symlinks 命令使用教程
225 1
|
9月前
|
设计模式 前端开发 Shell
Python装饰器是什么?
装饰器是Python中用于动态修改函数、方法或类功能的工具,无需改变原代码。通过将函数作为参数传递并返回新函数,装饰器可以在原函数执行前后添加额外逻辑。例如,使用`@logger`装饰器可以打印函数调用日志,而`@timethis`则可用于计算函数执行时间。为了保持被装饰函数的元信息(如`__name__`和`__doc__`),可使用`functools.wraps`装饰器。此外,带参数的装饰器可通过嵌套函数实现,如`@timeitS(2)`,以根据参数条件输出特定信息。
161 59
|
分布式数据库 流计算 Docker
实时计算 Flink版操作报错合集之在Docker上启动JobManager(JM)时遇到报错,,该怎么处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
9月前
|
安全 Oracle 关系型数据库
Nexpose 7.2.0 发布,新增功能简介
Nexpose 7.2.0 for Linux & Windows - 漏洞扫描
107 8
Nexpose 7.2.0 发布,新增功能简介
|
10月前
leecode刷题 二叉树 中序遍历
给定二叉树根节点,返回其节点值的中序遍历。示例1:输入root=[1,null,2,3],输出[1,3,2];示例2:输入root=[],输出[];示例3:输入root=[1],输出[1]。节点数范围[0,100],值范围[-100,100]。代码实现使用递归方法完成中序遍历。
62 6
|
关系型数据库 MySQL 数据处理
企业级应用 mysql 日期函数变量,干货已整理
本文详细介绍了如何在MySQL8.0中使用DATE_FORMAT函数进行日期格式的转换,包括当日、昨日及不同时间段的数据获取,并提供了实际的ETL应用场景和注意事项,有助于提升数据处理的灵活性和一致性。
128 0
|
JSON fastjson Java
Spring Boot Jackson 和Fast JSON 用哪个好啊 ?
【4月更文挑战第22天】
2707 1
|
存储 缓存 算法
分布式全局id
分布式全局id
111 1
|
Java 编译器
Java语言中的初始化:深入探索
Java语言中的初始化:深入探索
140 0
|
C语言
C语言:判断闰年(简单)
C语言:判断闰年(简单)
194 0