近十年来,互联网发生了翻天覆地的变化。新的联网方式、新的通讯方式,乃至新的支付、交易方式深刻地影响了人们的生活,在浪潮的冲击之下,传统编程语言经受住了考验,并焕发了新的生机,同时也涌现出了很多优秀的新型编程语言。

这是近十年来各编程语言的发展趋势图(数据源自 IEEE-spectrum 和 Stack Overflow),中间一栏是语言的应用领域,如 Web、移动端、企业应用、嵌入式等,右侧是语言相关的新项目数量趋势图。

可以看到 C++、C#、Java 等传统语言已经覆盖了各个领域,仿佛一门语言什么都可以做,Javascript 也早已走出了浏览器,Python 也正式步入嵌入式领域。如果十年前有人说要用 PHP 搞 AI 是不可思议的,但现在各种由 PHP 实现的更亲合 Web 环境的深度学习平台也进一步推进了人工智能的发展。

随着软件系统越来越复杂,为了有效控制从业人员的学习成本,编程语言全栈化将是一个大的趋势。而企业的营收突破了信息传播、交易方式等业务模式的限制后,软件技术的发展会更偏向算法、硬件乃至基础理论的研究,既可满足 CPU 密集型程序的开发又可使产品快速落地的编程语言将会胜出。

回顾以往的变革,从电脑到手机,从传统硬件到智能家居,从互联网到物联网,可以看到当今互联网的显著特征:

  • 设备智能化
  • 软件服务化
  • 多领域协作密切化

而各种丰富的软件服务之间又是紧密相关的,对产品的质量和安全性也提出了更高的要求。Rust 等新兴语言将安全性提升到了一个新的高度,同时又保证多种编程范式的灵活应用,这是新兴语言生命力旺盛的根本原因之一。

而对于传统语言,在当前的历史契机之下,有必要集结、整合各领域的安全编写规则,形成综合规范体系,以实现:

  • 企业对产品代码质量进行统一管控
  • 使从业人员形成完善的安全知识体系和严谨的工作态度

同一门语言在不同的领域有不同的侧重,嵌入式系统更注重在有限资源下的专用性和实时性,由于专有硬件更加多样化,所以嵌入式软件也更注重可移植性。对于桌面软件来说,其环境是灵活多变的,还需要防止其他程序的恶意干扰,所以桌面软件往往更强调健壮性。在通用架构下桌面与服务端的本质区别实际上并不是特别明显,但在桌面的基础之上,服务端软件更注重稳定性以及其专有的网络安全措施。

举个例子,在资源管理上,嵌入式系统和服务端系统有较大差异,“动态内存分配”这种资源管理方式在服务端可能完全不是问题,但在嵌入式等环境中可能就是需要规避的原则性问题了。

再比如进程崩溃这种问题,在服务端会造成“拒绝服务”这种安全漏洞,造成业务瘫痪,在桌面端除了给用户造成不好的体验外,还可能会遭到恶意调试,导致隐私泄露等安全问题,在嵌入式环境中甚至会导致设备的损毁,总之,产品的健壮性和安全性是紧密相关的。

360 质量工程部集结整合了 C 和 C++ 语言在各领域的注意事项,总结成《360 安全规则集合》,已在 Github 上开源,也为其他语言的相关工作提供参考模式。

项目地址:

 
其特点有:
  • 严格遵循编程语言的 ISO 标准
  • 融汇多种权威规范体系,符合国家审计标准
  • 适用于桌面、服务端及嵌入式等多种应用场景
  • 满足规范、审计、培训等多方面需求
  • 注重自动化代码审计的实现方法

保障软件安全、提升产品质量是宏大的主题,需要多方面地学习、探索与实践,欢迎提供修订意见和扩展建议。

 

原文地址:http://www.cnblogs.com/safe-rules/p/16814387.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性