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

弗吉尼亚理工大学的一组研究人员分析了数百篇关于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. vue项目性能优化,优化项目加载慢的问题

    一. 对路由组件进行懒加载: 如果使用同步的方式加载组件,在首屏加载时会对网络资源加载加载比较多,资源比较大,加载速度比较慢.所以设置路由懒加载,按需加载会加速首屏渲染.在没有对路由进行懒加载时,在C ...

  2. PCIe link up bug 分析

    Xilinx两块开发版PCIe link up时间相差很大,Virtex-6开发版PCIe link up时间超过60ms,而Virtex-7 PCIe link up时间只有~25ms.   分析过 ...

  3. VBA解析Json(转)

    Sub bluejson() 'ok Dim aa Set x = CreateObject("ScriptControl"): x.Language = "JScrip ...

  4. sourcetree 跳过首次登录

    定位到用户缓存数据目录:(需要在文件夹选项中 开启不隐藏文件夹和不隐藏文件扩展名) 一般为: C:\Users\{用户名}\AppData\Local\Atlassian 进入sourcetree目录 ...

  5. 爬虫利器 Puppeteer 实战

    Puppeteer 介绍 Puppeteer 翻译是操纵木偶的人,利用这个工具,我们能做一个操纵页面的人.Puppeteer是一个Nodejs的库,支持调用Chrome的API来操纵Web,相比较Se ...

  6. 校赛F

    问题描述 例如对于数列[1 2 3 4 5 6],排序后变为[6 1 5 2 4 3].换句话说,对于一个有序递增的序列a1, a2, a3, ……, an,排序后为an, a1, an-1, a2, ...

  7. GUI学习之七——单选框QRadioButton和QButtonGroup的学习总结

    一.单选框QRadioButton的使用 1.类的描述 a.单选框按钮用于给用户提供若干选项中的单选操作,当一个被选中时,会自动取消选中的那个.(如果只有一个时可以通过单击该按钮改变其状态:而存在多个 ...

  8. SpringBoot对注册用户密码进行Bcrypt密码加密

    一.注册用户时,用户的密码一般都是加密存储在数据库中.今天我要用到的加密方式是Bcrypt加密. 1.首先在SpringBoot项目的pom文件中,引入SpringSecurity相关依赖,目的是为了 ...

  9. spring+struts+hibernate整合

    spring整合: 1:添加配置文件和相应的spring jar包(记得一定要加上commons-logging的jar包,有坑****) 2:创建date对象,如果成功则spring的环境ok

  10. mybatis中怎样使用having?

    1.dao层代码 List<ErgTipSimpleBo> queryListMore(@Param("typeId") Integer typeId,@Param(& ...