0


# 开发安全

开发安全

文章目录

开发安全是指在软件开发过程中注重安全性,采取措施防止恶意攻击和数据泄露。这包括对代码进行安全审查,使用安全编程实践和工具,以及定期进行安全漏洞扫描和修复。开发安全是确保软件系统在设计和实现阶段考虑到安全性,并且在运行时能够有效地保护系统和数据免受攻击和威胁的过程。

安全开发生命周期

  • 需求分析阶段
  • 设计阶段:考虑安全方面的设计
  • 开发阶段:遵守编码安全规范、自动化测试工具
  • 测试阶段:渗透测试
  • 部署维护阶段:定期更新修复安全漏洞

安全开发目标

  • 保护隐私
  • 防止安全攻击漏洞
  • 确保系统可用
  • 遵守法律
  • 维护品牌荣誉
  • 节省成本资源

安全开发基本准则

  • 安全优先
  • 防御性编程:编写健壮的程序,能处理不良输入和异常输出

注入类攻击手段

Sql注入

  • 改变sql语义
SELECT*FROM users WHERE username ='输入的用户名'AND password ='输入的密码';# 如果攻击者在用户名字段中输入 ' OR '1'='1 ,那么SQL查询就会变成:SELECT*FROM users WHERE username =''OR'1'='1'AND password ='输入的密码';
  • SQL注入:预编译sql

命令执行

  • 通过改变输入执行系统命令。调用cmdping

命令执行防御

  • 参数化传值,避免拼接用户输入
  • 验证、过滤
  • 最小权限原则

文件遍历

  • 遍历到文件目录扫面文件

防御

  • 路径规范化、验证过滤、白名单机制、最小权限规则
  • 获取绝对路径getAbsolutePath()

植入类安全漏洞防御

XSS(前端漏洞)

  • Web页面插入恶意JS、钓鱼实现
防御
  • 过滤验证(白名单)、设置http头部
  • 输出的内容进行编码
  • 使用安全的前端框架

储存型XSS

  • 储存型Xss不会直接将恶意代码响应至前端浏览器进行渲染执行,先存储在数据库等介质中。
  • 为了防止储存型XSS攻击,开发人员应该对用户输入进行适当的过滤和转义,以防止恶意脚本被存储和执行。最好的做法是采用内容安全策略(CSP)来限制页面加载的资源和脚本,以及对用户输入进行严格的验证和过滤。这样可以有效地防止储存型XSS攻击。

文件上传

  • WebShell脚本文件
  • 上传恶意文件,自动执行
  • 直接拿下服务器
防御
  • 不能仅仅使用前端进行校验,需要在后端校验
  • 文件名称校验
  • 文件内容校验
  • 路径隔离,限制文件的执行权限

CSRF

  • 敏感的操作需要考虑CSRF攻击
  • 跨站请求伪造,受害者已经登陆的状态下
  • 常见的盗号、钓鱼页面、钓鱼网站
防御
  • 请求带上token
  • 同源检测

会话固定

  • 向用户传递一个一致的会话标识,引导用户使用该会话标识进行身份认证
防御
  • 随机会话id
  • 会话绑定
  • 安全的会话管理
  • 双重认证

其它类型安全漏洞

越权访问

  • 数据权限问题
防御
  • 校验输入
  • 权限最小化
  • 双重身份认证、强密码多因素
  • 关键操作日志,定期审计和监控

口令爆破

  • 需要使用强密码
  • 密码策略
  • 登录失败限制
  • 多因素身份认证
  • 安全监控

安全编码规范

输入验证和数据净化

  • 净化非受信数据(从外界来的数据),比如使用sql预编译防止sql注入问题
  • 避免目录遍历漏洞
  • 不要记录未净化过的数据,避免产生数据污染
  • 文件或者网络IO两端使用兼容的编码

业务安全漏洞

逻辑漏洞

逻辑混淆
  • 不充分的逻辑设计
  • 复杂的业务逻辑
  • 修改和维护中的逻辑变更:注释、交接
流程乱序
  • 业务流程执行的顺序与预期不符。产生原因有:并发操作
数据重放
  • 缺乏合适的身份认证和授权机制
  • 不安全的通信协议

规避方案

  • 充分的需求和设计,确保程序的逻辑结构清晰,合理,并充分考虑各种肯能的情况和分支
  • 逻辑注释和文档
  • 代码审查和测试

第三方安全

  • 漏洞和脆弱性
  • 依赖管理
  • 恶意注入和后门

缓解方案

  • 审查和评估
  • 定期更新
  • 依赖管理
  • 漏洞披露和响应
  • 安全编码实践

如何安全的开发

安全培训

  • 确保开发团队接受适当的安全培训,了解常见的安全漏洞和攻击方式,以及如何编写安全代码。

安全设计

  • 在软件设计阶段就考虑安全问题,例如通过威胁建模和安全架构评估来识别和减少安全风险。

安全编码

  • 遵循安全编码最佳实践,例如输入验证、输出编码、访问控制、错误处理和加密等。

代码审查

  • 在代码提交前进行代码审查,以识别和修复安全漏洞。可以使用静态代码分析工具来帮助识别漏洞。

安全测试

  • 在开发过程中进行安全测试,包括渗透测试和安全评估,以识别和修复安全漏洞。

定期更新和补丁

  • 定期更新和修补软件和系统,以修复已知的安全漏洞和错误。

访问控制

  • 实施严格的访问控制策略,限制对敏感数据和系统的访问。

加密

  • 使用加密技术保护敏感数据,例如使用 SSL/TLS 加密网络通信,使用加密算法保护存储的数据。

事件监控和响应

  • 实施事件监控和响应计划,以识别和响应安全事件。

持续改进

  • 定期评估和改进安全实践,以适应新的安全威胁和技术趋势。

总之,提高开发安全需要全面的安全实践,包括安全培训、安全设计、安全编码、代码审查、安全测试、定期更新和补丁、访问控制、加密、事件监控和响应、以及持续改进。
加密

  • 使用加密技术保护敏感数据,例如使用 SSL/TLS 加密网络通信,使用加密算法保护存储的数据。

事件监控和响应

  • 实施事件监控和响应计划,以识别和响应安全事件。

持续改进

  • 定期评估和改进安全实践,以适应新的安全威胁和技术趋势。

总之,提高开发安全需要全面的安全实践,包括安全培训、安全设计、安全编码、代码审查、安全测试、定期更新和补丁、访问控制、加密、事件监控和响应、以及持续改进。

标签: 安全

本文转载自: https://blog.csdn.net/qq_37248504/article/details/139754329
版权归原作者 全栈程序员 所有, 如有侵权,请联系我们删除。

“# 开发安全”的评论:

还没有评论