腾讯代码安全指南开源,涉及 C/C++Go 等六门编程语言

Posted 简说Linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯代码安全指南开源,涉及 C/C++Go 等六门编程语言相关的知识,希望对你有一定的参考价值。

腾讯代码安全指南旨在梳理 API 层面的风险点并提供详实可操作的编码指引,是我们开展 DevSecOps 安全左移实践探索过程中,梳理沉淀面向开发人员的代码安全参考材料。

本次开源涉及 C/C++、javascript、Node、Go、Java、Python 六门编程语言的安全指南。

一、项目背景

近年来,无论是 DevSecOps,还是 Google SRE 的可靠和安全性理念,都提倡“安全需要每个工程师的参与”。其中涉及的“安全左移”理念也再次被推向前台,获得关注。

除安全团队建设一系列安全机制和工具外,每位开发者也可以身体力行地参与进来——编写安全的代码,从源头杜绝漏洞。

基于此,腾讯各 BG 安全团队和热心开发人员,从业务角度梳理了代码安全指南。它提供了详实的参考材料和行动大纲,分功能、语言整理了编码的最佳安全实践,可作为一线开发者的权威参考,有助于开发黑、白盒漏洞扫描工具和策略。

二、设计理念

代码安全指南的内容呈树状结构展开,共分 5 层,如下:

2.1 语言

每种语言面临安全的风险种类不同,需要分别开展详述。如:go 和 javascript 对比,go 就不存在原型链污染的问题。同时,由于公司内的代码风格规范亦分语言展开,安全规范采取相同的分语言方式能保持整体的连贯性。

2.2 

这里的端是指不同的终端,如:Web、安卓客户端、ios 客户端、PC 客户端。实践过程中,将内容按端区分的原因有:

1、同一门编程语言,用在不同的终端应用开发,其面临的风险类型和数量有着天壤之别。例如:JavaScript 应用于前端页面开发时,面临的主要风险是 DOM XSS;但 JavaScript 亦可依托 Node.js 进行 Web 后端接口开发,如果编码不当,则存在命令注入、SQL 注入等风险。

2、大型互联网公司内,项目开发采取“流水线”化作业,分工往往精细明确,将不同端的场景作为主干目录,更便于开发人员检索、快速了解编码安全知识。

2.3 场景

通过复盘历史漏洞,安全风险可按成因粗略归为两类:

1、代码漏洞,是指代码编写时,因不安全的 API 使用和逻辑编写产生的安全风险。

2、运维漏洞,是指代码的运行环境、配置和依赖等系统运维相关的问题。涉及的安全风险本质上是:部分语言依赖包管理,当部分企业私有软件包仅在公司内部软件源注册时,攻击者就可以在外部公共软件源上抢注。如果公司内员工使用包管理软件拉取时,未配置公司镜像源时,就会拉取到攻击者抢注的恶意包。

2.4 功能

在对内、外部发现的漏洞进行复盘过程中,我们发现安全风险与业务场景高度相关,例如:

由于代码安全指南的目标受众是开发人员看的。在撰写指南过程中,我们尝试将漏洞转化为功能场景,以此作为主干目录。由于与具体的业务场景关联,在开发时能更容易想起相关的注意事项,由此可降低认知、学习成本。

2.5 内容

指南内容核心围绕编程语言和框架的 API/sink 点展开。对开发人员来说,API 是实现业务逻辑时,高频接触对象。而通常,安全漏洞往往可归因为 API 的错误使用。对安全工程师来说,sink 点是编写安全策略、组件是非常重要的一部分,直接决定了安全系统的扫描能力。

编写代码安全指引时,采取了以下方法来提升内容的完善性:

● 聚合各语言、组件、框架文档中的最佳安全实践;

● 充分调研 CWE、OWASP 等现有规范,采用更方便开发者记忆的编排和阐述方式;

● 编码模式基于丰富的公司内外已知漏洞案例,不断补充先前未考虑到的风险规避建议;

● 举一反三,结合各类开发文档和提炼的漏洞产生原因,挖掘鲜有提及的风险点加入规范中。

三、开源交流

我们希望通过将代码安全指南开源,帮助有 DevSecOps 和安全左移建设的企业机构解决实际问题。同时,安全指引需要随着新发现的漏洞、编程语言&框架的迭代不断完善。希望能和社区携手,一道维护完善。如果你觉得帮助,欢迎给项目 Star、提交 Issue 和 PR。

腾讯发布了Go语言代码安全指南

在我们开发的过程中,会涉及到很多数据的处理以及相应的代码逻辑,如果不小心,可能会导致BUG,甚至被恶意利用的漏洞。比如内存溢出、下标越界、空指针异常等等。

对于一个经验丰富的开发人员,会在自己编写代码的时候,会潜意识的处理这些问题,这就是资深开发的宝贵经验,所以他们的代码上线后,很少出现问题,对于更NB的开发,他们甚至有自己的一套代码工具箱,都是他们多年编码经验的总结,拿来即用。相反对于一个初级开发人员,可能就不会处理了,甚至可能想不到,所以资深开发的价值就能很好的体现出来。

但是,一个团队,总不能要求所有人都是资深开发,同理整个公司、整个行业也是一样的,所以就有了很多框架、工具以及规范,这些可以让我们站在前辈们的肩膀上,也能写出来优异的代码。

这不,前几天逛GitHub的时候,发现腾讯发布了代码安全指南,旨在梳理API层面的风险点并提供详实可行的安全编码方案。

基于DevSecOps理念,我们希望用开发者更易懂的方式阐述安全编码方案,引导从源头规避漏洞。
https://github.com/Tencent/secguide

腾讯这次一口气发布了6种语言的代码安全指南:C/C++、Go、Java、Node、JavaScript、Python,我们主要介绍Go语言的代码安全指南。

1.1.1切片长度校验

  • 在对slice进行操作时,必须判断长度是否合法,防止程序pan

以上是关于腾讯代码安全指南开源,涉及 C/C++Go 等六门编程语言的主要内容,如果未能解决你的问题,请参考以下文章

腾讯发布了Go语言代码安全指南

腾讯发布了Go语言代码安全指南

腾讯发布了Go语言代码安全指南

腾讯发布了Go语言代码安全指南

腾讯发布了Go语言代码安全指南

腾讯发布了Go语言代码安全指南