• # 开发安全


    开发安全

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

    安全开发生命周期

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

    安全开发目标

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

    安全开发基本准则

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

    注入类攻击手段

    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 加密网络通信,使用加密算法保护存储的数据。

    事件监控和响应

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

    持续改进

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

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

  • 相关阅读:
    定时任务每秒执行、每分钟执行、每小时执行、每天执行、每周执行、每月执行、每年执行、定时任务重复执行、循环执行
    第二次工业革命
    没想到还有这种骚操作~如何使用Golang实现无头浏览器截图?
    java毕业设计普通中学体育卫生信息管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
    韩顺平linux(1-11小节)
    恶意代码可视化检测技术研究综述
    Calendar.getInstance()获取指定时间点(定时)
    【UE5.1 角色练习】09-物体抬升、抛出技能 - part1
    vue3相关内容
    StarUML的介绍与使用
  • 原文地址:https://blog.csdn.net/qq_37248504/article/details/139754329