研发安全(一)——研发人员必须掌握的安全开发常识

本文阐述了研发人员必须掌握的安全开发常识,包括理解安全开发的重要性、熟悉常见安全漏洞、保护数据隐私、输入验证和过滤、遵循安全编码规范。强调了数据校验、敏感信息处理、加密算法、序列化和反序列化、I/O操作、多线程安全以及框架和组件安全的必知规则。
摘要由CSDN通过智能技术生成

研发安全(一)研发人员必须掌握的安全开发常识

1 引言

随着信息技术的不断发展,软件安全问题逐渐凸显,成为了软件研发过程中不可忽视的重要方面。作为研发人员,掌握安全开发常识,不仅有助于提升软件产品的安全性,还能够有效预防潜在的安全风险。本文将讲述研发人员必须掌握的安全开发常识。

2 必备认知

2.1 理解安全开发的重要性

研发人员需要理解安全开发的重要性,并意识到安全漏洞可能导致的严重后果,包括数据泄露、系统被攻击等。他们应始终将安全性作为软件设计、开发和测试的重要考量因素。

2.2 熟悉常见的安全漏洞类型

研发人员需要对常见的安全漏洞类型有深入的了解,如SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。他们应熟悉这些攻击原理,并掌握相应的防范措施,以防止恶意代码注入和非法访问。

2.3 保护数据和隐私

对于数据的保护和隐私的维护也是研发人员必须重视的方面。他们需要了解如何采用安全的密码存储和传输方式,防止密码泄露;同时,也需要对敏感信息进行加密处理,确保其在传输和存储过程中的安全性。

2.4 进行输入验证和过滤

在开发过程中,输入验证和过滤是防止安全漏洞的重要手段。研发人员应对用户输入进行严格的验证和过滤,防止恶意代码的注入。同时,他们还需要对应用程序的错误处理进行规范,防止敏感信息的泄露

2.5 遵循安全编码规范和关注最新安全动态

了解并遵循安全编码规范也是研发人员必备的认知之一。这些规范可以帮助他们避免使用不安全的函数和API,减少潜在的安全风险。此外,研发人员还需要关注最新的安全动态和技术发展,持续学习和提升自己的安全意识和技能水平。他们应定期参加安全培训、阅读安全相关文献、关注安全社区等,以了解最新的安全威胁和防护措施。比如常见安全研发认知规范:

  • 【强制】禁止开发模拟登录功能
  • 【强制】禁止开发万能借口
  • 【强制】生产操作严格执行双人复核

3 必知规则

3.1 数据校验

  • 完整性校验:所有传输或存储的数据都应进行完整性校验。这通常通过添加校验和、哈希值或数字签名来实现。这些校验机制能够检测数据在传输或存储过程中是否遭到篡改或损坏。

  • 输入验证:对于所有用户输入的数据,必须进行严格的验证。这包括检查数据类型、格式、长度以及是否包含潜在的危险字符或代码。输入验证有助于防止SQL注入、跨站脚本攻击(XSS)等安全漏洞。

  • 范围校验:对于数值型数据,应设置合理的范围限制。这有助于防止因输入超出预期范围而导致的程序错误或安全漏洞。

  • 一致性校验:在数据处理的各个环节,都应进行一致性校验。例如,在数据更新或删除时,应检查相关数据是否保持一致;在数据合并或转换时,应确保数据格式和逻辑的一致性。

  • 【强制】禁止向Runtime.exec()方法传递不可信、未净化的数据

  • 【强制】禁止直接使用不可信数据来拼接XML、SQL语句

  • 【强制】禁止未经验证的用户输入直接输出到html界面

  • 【强制】禁止程序数据进行增、删、改、查时对客户端请求的数据过分相信而遗漏对于权限的判定

3.2 敏感信息

  • 【强制】禁止在日志中明文保存用户敏感数据
  • 【强制】基于hash算法的口令存储必须加盐值(salt)
  • 【强制】敏感数据在跨信任域之间传递采用签名加密传输
  • 【建议】邮件传输时需要使用安全协议SSL/TLS加密传输,避免攻击者在网络上嗅探到用户数据

3.3 加密算法

  • 【强制】禁止使用不安全的加密算法DES\3DES
  • 【强制】敏感数据加密使用强随机数
  • 【建议】非对称加密算法RSA的使用需要注意长度至少为2048位
  • 【一般】Base64是编码算法不是加密算法

3.4 序列化和反序列化

  • 【建议】最小化序列化的数据:只序列化必要的对象状态,而不是整个对象或其方法。这有助于减少潜在的安全风险,因为更少的数据意味着更少的攻击面。
  • 【建议】安全地处理反序列化:反序列化过程中,要特别注意数据的来源和完整性。不要信任来自不受信任源的反序列化数据,因为它们可能包含恶意代码或攻击。使用安全的反序列化库,并验证数据的完整性和格式。
  • 【建议】类ObjectInputStream在反序列化时,对生成的对象的类型做限制

3.5 I/O 操作

  • 【强制】文件上传应根据业务的需要限定文件的格式和大小
  • 【强制】使用文件、IO流、数据库连接等主动释放资源
  • 【建议】文件下载的地方,应对文件的路径进行校验,或者使用文件id映射到文件的方式下载文件
  • 【建议】临时文件使用完毕应及时删除

3.6 多线程安全

  • 避免共享状态:尽量减少线程间的共享状态。如果可能,尽量将共享数据封装在对象中,并通过方法来访问数据,而不是直接操作共享变量。这样可以减少线程间的耦合度,降低线程安全问题的风险。

  • 使用同步机制:当需要共享数据时,应使用适当的同步机制,如锁、同步代码块或原子变量,来确保对共享数据的访问是线程安全的。

  • 避免死锁:在使用锁或其他同步机制时,要注意避免死锁。死锁是指两个或更多个线程无限期地等待一个资源,而该资源又被另一个线程持有,导致所有线程都无法继续执行。

  • 合理设计线程交互:线程间的交互应该尽可能简单和明确。避免复杂的线程间依赖和通信模式,以减少潜在的安全问题。

  • 安全退出线程:在退出线程时,要确保所有资源都被正确释放,避免资源泄漏或数据不一致的问题。

  • 遵守最佳实践:遵循编程语言和框架提供的最佳实践,使用线程安全的集合类、工具和方法。

原子性:多线程环境中,某些操作必须是原子的,即不可中断的。这意味着这些操作在执行过程中不会被其他线程打断。原子操作在多线程环境下是线程安全的,因为它们要么完全执行,要么完全不执行。

可见性:一个线程对共享变量的修改必须对其他线程可见。这通常涉及到内存模型的理解,因为不同的线程可能在不同的处理器核心或缓存中运行,它们对共享内存的访问可能不是即时的。因此,需要确保共享变量的更新能够被其他线程及时观察到。

有序性:线程的执行顺序和内存访问顺序需要得到正确的控制。编译器和处理器为了提高性能,可能会对指令进行重排序。但在多线程环境中,这种重排序可能导致数据不一致或其他未预期的行为。因此,需要确保操作的顺序在多线程环境下是可预测和一致的。

3.7 框架和组件安全

  • 【强制】禁止使用来源不明的框架和组件
  • 【建议】使用安全版本的框架和组件,官网下载使用前先确认是否有公开的漏洞
  • 【建议】及时更新框架和组件版本

4 结语

掌握安全开发常识对于研发人员来说至关重要。通过树立正确的安全开发意识、遵循安全原则、实施数据安全与隐私保护、进行输入验证与过滤、管理漏洞与风险、遵循安全编码规范、进行安全测试与验证、持续学习与跟踪最新安全动态、跨领域合作与沟通以及遵守合规性与法规要求等多方面的努力,研发人员可以有效提升软件的安全性,为用户提供更加安全、可靠的服务。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 背景 4 2. 编码安全 4 2.1. 输入验证 4 2.1.1. 概述 5 2.1.2. 白名单 5 2.1.3. 黑名单 5 2.1.4. 规范化 5 2.1.5. 净化 5 2.1.6. 合法性校验 6 2.1.7. 防范SQL注入 6 2.1.8. 文件校验 6 2.1.9. 访问控制 6 2.2. 输出验证 6 2.2.1. 概述 6 2.2.2. 编码场景 6 2.2.3. 净化场景 7 2.3. SQL注入 7 2.3.1. 概述 7 2.3.2. 参数化处理 7 2.3.3. 最小化授权 7 2.3.4. 敏感数据加密 7 2.3.5. 禁止错误回显 8 2.4. XSS跨站 8 2.4.1. 输入校验 8 2.4.2. 输出编码 8 2.5. XML注入 8 2.5.1. 输入校验 8 2.5.2. 输出编码 8 2.6. CSRF跨站请求伪造 8 2.6.1. Token使用 9 2.6.2. 二次验证 9 2.6.3. Referer验证 9 3. 逻辑安全 9 3.1. 身份验证 9 3.1.1. 概述 9 3.1.2. 提交凭证 9 3.1.3. 错误提示 9 3.1.4. 异常处理 10 3.1.5. 二次验证 10 3.1.6. 多因子验证 10 3.2. 短信验证 10 3.2.1. 验证码生成 10 3.2.2. 验证码限制 10 3.2.3. 安全提示 11 3.2.4. 凭证校验 11 3.3. 图灵测试 11 3.3.1. 验证码生成 11 3.3.2. 验证码使用 11 3.3.3. 验证码校验 11 3.4. 密码管理 12 3.4.1. 密码设置 12 3.4.2. 密码存储 12 3.4.3. 密码修改 12 3.4.4. 密码找回 12 3.4.5. 密码使用 12 3.5. 会话安全 13 3.5.1. 防止会话劫持 13 3.5.2. 会话标识符安全 13 3.5.3. Cookie安全设置 13 3.5.4. 防止CSRF攻击 13 3.5.5. 会话有效期 14 3.5.6. 会话注销 14 3.6. 访问控制 14 3.6.1. 跨权访问 14 3.6.2. 控制方法 14 3.6.3. 控制管理 14 3.6.4. 接口管理 15 3.6.5. 权限变更 15 3.7. 文件上传安全 15 3.7.1. 身份校验 15 3.7.2. 合法性校验 15 3.7.3. 存储环境设置 15 3.7.4. 隐藏文件路径 16 3.7.5. 文件访问设置 16 3.8. 接口安全 16 3.8.1. 网络限制 16 3.8.2. 身份认证 16 3.8.3. 完整性校验 16 3.8.4. 合法性校验 16 3.8.5. 可用性要求 17 3.8.6. 异常处理 17 4. 数据安全 17 4.1. 敏感信息 17 4.1.1. 敏感信息传输 17 4.1.2. 客户端保存 17 4.1.3. 服务端保存 17 4.1.4. 敏感信息维护 18 4.1.5. 敏感信息展示 18 4.2. 日志规范 18 4.2.1. 记录原则 18 4.2.2. 事件类型 18 4.2.3. 事件要求 18 4.2.4. 日志保护 19 4.3. 异常处理 19 4.3.1. 容错机制 19 4.3.2. 自定义错误信息 19 4.3.3. 隐藏用户信息 19 4.3.4. 隐藏系统信息 19 4.3.5. 异常状态恢复 20 4.3.6. 通信安全 20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值