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

弗吉尼亚理工大学的一组研究人员分析了数百篇关于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/

Java安全编码:糟糕的在线建议和令人困惑的APIs的更多相关文章

  1. Java Script 编码规范【转】

    Java Script 编码规范 以下文档大多来自: Google JavaScript 编码规范指南 Idiomatic 风格 参考规范 ECMAScript 5.1 注解版 EcmaScript ...

  2. 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  3. 在JAVA中记录日志的十个小建议

    JAVA日志管理既是一门科学,又是一门艺术.科学的部分是指了解写日志的工具以及其API,而选择日志的格式,消息的格式,日志记录的内容,哪种消息对应于哪一种日志级别,则完全是基于经验.从过去的实践证明, ...

  4. java字符编码详解

    引用自:http://blog.csdn.net/jerry_bj/article/details/5714745 GBK.GB2312.iso-8859-1之间的区别 GB2312,由中华人民共和国 ...

  5. JAVA字符编码三:Java应用中的编码问题

    第三篇:JAVA字符编码系列三:Java应用中的编码问题 这部分采用重用机制,引用一篇文章来完整本部分目标. 来源:  Eceel东西在线 问题研究--字符集编码  地址:http://china.e ...

  6. Java安全编码之用户输入

    0x00 安全引言 1.传统Web应用与新兴移动应用 (1)传统Web应用:浏览器 HTTP 服务器(2)新兴移动应用:APP HTTP 服务器 从安全角度看,传统Web应用与新兴移动应用没有本质区别 ...

  7. 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  8. 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    我们最初学习计算机的时候,都学过ASCII编码. 但是为了表示各种各样的语言,在计算机技术的发展过程中,逐渐出现了很多不同标准的编码格式, 重要的有Unicode.UTF.ISO-8859-1和中国人 ...

  9. Java 字符编码(一)Unicode 字符编码

    Java 字符编码(一)Unicode 字符编码 Unicode(http://www.unicode.org/versions/#TUS_Latest_Version) 是一个编码方案,说白了希望给 ...

随机推荐

  1. byte -> int

    传送门 传送门2 以下copy: int i = 0;   i += ((b[0] & 0xff) << 24);   i += ((b[1] & 0xff) <&l ...

  2. python基础(17)继承类和面向对象初识

    1.继承类 class Lm: money = 1000000 house = 5 def driver(self): print('会开车') class Mcb(Lm): def about_me ...

  3. 将jar包添加到本地maven仓库中

    在使用maven依赖添加jar包时,有时会遇到下载不成功的问题,这时需要将jar手动添加到本地的maven仓库中. 准备工作 配置好maven的环境变量 已经下载好的jar包 具体过程 win + R ...

  4. Gulp入门及简单使用

    前言 什么是gulp?gulp有什么用?为什么用gulp? gulp是前端开发的一种构建工具. 构建工具可以帮助我们工程化地开发项目,比如搭建本地服务器.编译CSS预处理器.保存文件后自动刷新浏览器而 ...

  5. Oracle使用触发器和mysql中使用触发器的比较

    一.触发器 1.触发器在数据库里以独立的对象存储, 2.触发器不需要调用,它由一个事件来触发运行 3.触发器不能接收参数 --触发器的应用 举个例子:校内网.开心网.facebook,当你发一个日志, ...

  6. python基础之Day20part2

    面向过程:核心是过程,解决问题的步骤,先干嘛后干嘛,机械流水线 复杂问题流程化简单化但扩展性差 面向对象:核心是对象,是特征与对象的集合体,基于该思想编写程序,就好比上帝造世界,上帝式的思维方式 扩展 ...

  7. sqlserver CLR sqlserver使用C# dll

    转载地址:https://www.cnblogs.com/Brambling/p/8000911.html

  8. js string和number

    number Js只有一种数字类型(包括整型,浮点型) 极大或极小的可用科学计数法来表示.(7.7123e+1) 所有js数字均为64位 Js所有的数字都存储为浮点型 小数的最大位数是17位 0开头的 ...

  9. Yarn的Linking dependencies特别慢的优化方法

    通过以下方法,可以提升部分速度: 把项目文件夹添加进杀毒软件的白名单 把Yarn的缓存文件夹(yarn cache dir查看路径)添加进杀毒软件白名单 把Yarn的安装目录添加进杀毒软件白名单 把N ...

  10. ArrayList增加扩容问题 源码分析

    public class ArrayList<E>{ private static final int DEFAULT_CAPACITY = 10;//默认的容量是10 private s ...