• 【软件工程之美 - 专栏笔记】34 | 账号密码泄露成灾,应该怎样预防?



    专栏信息

    1. 专栏作者:宝玉

    2. 专栏发布平台:极客时间


    在这里插入图片描述

    主要内容

    今天,我将带你了解一下软件开发中的安全问题,学习如何构建安全的软件,以及出现了安全问题之后该怎么办。


    一、安全问题本质是技术风险

    安全问题,本质上也是一种技术风险,没发生问题的时候一切都好,一旦发生就会有严重的影响。

    软件中的安全问题来源主要可以分为以下三大类。

    1. 第一类:恶意输入

      SQL 注入、XSS 攻击

      这类问题都是由于恶意输入导致的,应对恶意输入的问题,最简单有效的方式就是对用户输入的数据,做严格的校验,格式化

    2. 第二类:假冒身份

      很多程序对于用户身份的校验比较弱,可能会导致黑客假冒用户身份做出超越权限的事情。

      如果对用户的身份不做严格的验证,很可能就会导致假冒身份的安全问题。应对策略就是要对用户的身份做验证,尤其是涉及敏感权限的操作,甚至要做两重验证。

    3. 第三类:数据泄露

      很多软件都储存了用户的敏感信息,比如用户帐号密码信用卡记录,或者服务器的敏感信息,比如数据库连接字符串、登录帐号密码,而这些数据是有被泄露风险的。


    二、如何预防软件中的安全问题?

    预防软件中的安全问题,也可以参考对风险管理的策略。在风险管理中,对风险识别和量化后,接下来就是要制定应对计划了。

    那么在软件开发的各个阶段,都需要如何考虑好安全方面的问题呢?

    1. 需求阶段

      需求是软件项目的源头,在确定需求,做产品设计的时候,不仅要考虑到功能上的需求,还要同时考虑到安全方面的要求。这样当你在架构设计的时候,就不会轻易遗漏安全方面的架构设计。

      当你在需求阶段就提出了安全性的需求,设计、实现和测试时自然不会遗漏掉安全方面的内容,从源头上就让大家有了安全方面的意识。

    2. 设计阶段

      在做设计架构时,最重要的事就是要把安全加入到设计目标,有了安全方面的设计目标,自然能找到很多安全相关的解决方案。

      现在架构设计领域,也有了一些业界公认的好的安全相关的设计原则,比如说攻击面最小化、权限最小化、纵深防御等。

    3. 开发阶段

      只是设计阶段做好安全相关的设计还不好,很多安全问题其实都是编码阶段时,没有好的编码习惯、没有良好的安全意识导致的。

      对于开发阶段的安全问题预防,需要从以下几个方面入手。

      1. 编码规范中加入安全相关内容
      2. 要有代码审查
      3. 增加安全相关的自动化测试
    4. 测试阶段

      在测试阶段,除了功能测试以外,增加对安全性方面的测试。

    5. 上线维护

      上线部署时,不部署源代码,只对编译后程序部署;删除 Debug 文件。


    三、如果真的出现安全问题怎么办?

    安全问题就像程序的 Bug 一样,没有谁能保证绝对的安全,就像风险管理的最后一步风险监控那样,我们必须做好 Plan B,万一出现安全问题,马上应对,将损失降到最低。

    1. 首先,要设立应急的流程。
    2. 其次,要分析程序的漏洞在哪里。
    3. 最后,要总结原因。

    四、其他摘抄

    • 我见过有的网站,把后台入口隐藏起来,而没有做权限控制,导致黑客猜到地址后就可以进入后台操作。
    • 还有的游戏后台不做验证,直接接收传入的数据,导致可以伪造游戏用户发送数据,破坏游戏平衡。
    • 我们不能假设数据存储是安全的,而是要考虑到数据是有泄露的可能,提前做好预防措施,对敏感数据进行加密。

    总结

    软件的安全问题本质也是一种技术风险,可以借用风险管理的知识来帮助构建高安全性的软件。

    安全问题就像程序的 Bug 一样,不能绝对避免,同时也要做好应对措施,在出现安全问题后,将损失降到最低,并且避免以后发生类似问题。课后思考

  • 相关阅读:
    微服务项目实战-黑马头条(三):APP端文章详情
    Flash Cache 过渡方案
    Lvs+Nginx+NDS
    【C/C++动态内存 or 柔性数组】——对动态内存分配以及柔性数组的概念进行详细解读(张三 or 李四)
    哪位友友可以解答一下?用MATLAB
    带你搭一下你的第一个SpringBoot项目
    终端仿真软件连接交换机调试步骤
    Linux系统InfluxDB数据和日志目录迁移教程
    QT+OSG/osgEarth编译之四十三:osgGA+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5核心库osgGA)
    Shell test 命令
  • 原文地址:https://blog.csdn.net/mek1986/article/details/126111668