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

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

yy.png

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

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

项目主页:

https://github.com/Tencent/se...

项目背景

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

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

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

设计理念

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

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 功能

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

yy.png

由于代码安全指南的目标受众是开发人员看的。在撰写指南过程中,我们尝试将漏洞转化为功能场景,以此作为主干目录。

由于与具体的业务场景关联,在开发时能更容易想起相关的注意事项,由此可降低认知、学习成本。

2.5 内容

指南内容核心围绕编程语言和框架的API/sink点展开。对开发人员来说,API是实现业务逻辑时,高频接触对象。

而通常,安全漏洞往往可归因为API的错误使用。对安全工程师来说,sink点是编写安全策略、组件是非常重要的一部分,直接决定了安全系统的扫描能力。

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

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

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

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

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

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

            </div>
相关文章
|
1月前
|
C++
C++ 语言异常处理实战:在编程潮流中坚守稳定,开启代码可靠之旅
【8月更文挑战第22天】C++的异常处理机制是确保程序稳定的关键特性。它允许程序在遇到错误时优雅地响应而非直接崩溃。通过`throw`抛出异常,并用`catch`捕获处理,可使程序控制流跳转至错误处理代码。例如,在进行除法运算或文件读取时,若发生除数为零或文件无法打开等错误,则可通过抛出异常并在调用处捕获来妥善处理这些情况。恰当使用异常处理能显著提升程序的健壮性和维护性。
48 2
|
30天前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
101 0
|
18天前
|
编译器 Go
go语言学习记录(关于一些奇怪的疑问)有别于其他编程语言
本文探讨了Go语言中的常量概念,特别是特殊常量iota的使用方法及其自动递增特性。同时,文中还提到了在声明常量时,后续常量可沿用前一个值的特点,以及在遍历map时可能遇到的非顺序打印问题。
|
1月前
|
程序员 C++ 开发者
C++命名空间揭秘:一招解决全局冲突,让你的代码模块化战斗值飙升!
【8月更文挑战第22天】在C++中,命名空间是解决命名冲突的关键机制,它帮助开发者组织代码并提升可维护性。本文通过一个图形库开发案例,展示了如何利用命名空间避免圆形和矩形类间的命名冲突。通过定义和实现这些类,并在主函数中使用命名空间创建对象及调用方法,我们不仅解决了冲突问题,还提高了代码的模块化程度和组织结构。这为实际项目开发提供了宝贵的参考经验。
47 2
|
1月前
|
C++
拥抱C++面向对象编程,解锁软件开发新境界!从混乱到有序,你的代码也能成为高效能战士!
【8月更文挑战第22天】C++凭借其强大的面向对象编程(OOP)能力,在构建复杂软件系统时不可或缺。OOP通过封装数据和操作这些数据的方法于对象中,提升了代码的模块化、重用性和可扩展性。非OOP方式(过程化编程)下,数据与处理逻辑分离,导致维护困难。而OOP将学生信息及其操作整合到`Student`类中,增强代码的可读性和可维护性。通过示例对比,可以看出OOP使C++代码结构更清晰,特别是在大型项目中,能有效提高开发效率和软件质量。
23 1
|
1月前
|
程序员 Go
Go 语言:面向对象还是非面向对象?揭开编程语言的本质
Go 语言:面向对象还是非面向对象?揭开编程语言的本质
|
28天前
|
Java Go 开发者
|
1月前
|
SQL 关系型数据库 MySQL
「Go开源」goose:深入学习数据库版本管理工具
「Go开源」goose:深入学习数据库版本管理工具
「Go开源」goose:深入学习数据库版本管理工具
|
1月前
|
C++
C++代码来计算一个点围绕另一个点旋转45度后的坐标
C++代码来计算一个点围绕另一个点旋转45度后的坐标
46 0
|
1月前
|
C++
Resharper c++ 使用Enter自动补全代码
Resharper c++ 使用Enter自动补全代码
32 0