阅读更多

4顶
2踩

研发管理

翻译新闻 自上而下做好安全代码审查

2013-11-21 16:21 by 见习编辑 tuhaihe 评论(1) 有10346人浏览

安全的程序开发实践的一个关键方面就是安全代码审查。安全代码审查,与常规的代码审查一样,可以使用自动化工具完成,也可以要求开发者亲自参与到代码审查中人工完成。那么,安全代码审查与常规的代码审查有哪些差别、如何做到更有效的安全代码审查呢?大家可以通过本文了解一下。

安全代码审查:对安全知识要求高

常规的程序代码审查需要代码审查者具备业务、程序语言和相关技术知识的积累,安全代码审查则需要具备以下 3 个不同方面的安全知识:

  • 常见威胁(可以前往 STRIDE 了解此类威胁)
  • 安全漏洞OWASP 描述了 10 种最常见的安全漏洞)
  • 常见的程序修复技术

让安全代码审查更有效:自上而下

要做到有效的安全代码审查,方式之一就是采用自上而下的方法,此方法要求代码审查者了解用例细节且对此有比较深入地掌握。进行安全代码审查,建议你按照下面的步骤进行。

1,了解待审查代码的用例细节

2,分解用例

以下面形式分解用例,该种分解属于数据流图(DFD)式威胁模型:

  • 角色(Actor,外部实体)
  • 数据流
  • 应用程序/模块
  • 数据存储

3,识别威胁

STRIDE 可用来识别对上述元素的威胁。STRIDE,是“假冒身份、篡改数据、否认、信息泄露、拒绝服务和权限提升”英文单词的缩写(对应的英文为 Spoofing Identity、Tampering Data、Repudiation、Information Disclosure、Denial of Service 与 Elevation of Privelege)。比如,角色(Actor)可能会受到来自“假冒身份”和“否认”的威胁;数据流可能会受到“篡改数据”、“信息泄露”和“拒绝服务”等方式的威胁等。

4,检查安全漏洞

一旦威胁与全部元素发生了关系,则需检查潜在的可能转变为攻击的安全漏洞。如,SQL 注入,会话处理,已破坏的验证与授权等。可以查看文章  OWASP Top 10 了解常见的 10 种安全漏洞。

5,做好补救控制

一旦确认安全漏洞,则需检查补救控制措施是否到位或针对这些漏洞的措施是否恰当。这些补救控制措施通常就是更为安全的代码。可以在OWASP Top 10 每个单独链接页查看相应的补救控制措施建议。

下面针对部分威胁和安全漏洞给出了对应的补救控制建议:

    • SQL 注入攻击:在查询相关的代码中搜索参数化 API(parametrized API)的使用情况。同时,也要请求一个或多个输入验证架构,如 OWASP ESAPI 用在转义可能带来注入攻击的字符的情况。
    • 跨站点脚本攻击(XSS):搜索基于 HTML 上下文(主体、属性、JavaScript、CSS或URL)用于转义全部不受信任数据的代码。可以查看 OWASP 跨站点脚本攻击备忘了解数据转义技术细节。
    • 敏感数据曝光:查询敏感数据并检查该类数据的存储策略。可以从代码角度来检查数据的加密强度。
    • 功能级权限控制缺失:在代码审查时,要确认何人具备访问该功能的授权、是否根据用户类型赋予了其合理的权限控制。在控件或业务逻辑中,数据集有时仅能由特定类型的用户进行访问。

结语

目前,对部分开发者来说,可能还需要一定程度的安全培训才能胜任安全代码审查工作、实现有效的安全代码审查。代码的常规审查不可少,安全审查也不可少,对安全性要求较高的程序尤其要注意。如果缺少了这道流程,万一遭受攻击,带来的损失将远超过我们的想象,“预则立,不预则废”说的就是这个道理。

Via Vitalflux

 

4
2
评论 共 1 条 请登录后发表评论
1 楼 wafech 2013-11-25 08:47
什么自动化工具没有说呀

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 现在学好C4D有发展吗?能做什么工作?

    现在学好C4D有发展吗?能做什么工作? C4D近些年越来越火,应用的范围也越来越广,除了影视剧,电商平台,综艺栏目,短视频等会用到C4D之外,房地产的漫游项目也有一部分被C4D替代了,还有各种效果设计图,都常常...

  • 分布式 - 谈谈你对分布式的理解,为什么引入分布式?

    总结 随着互联网的发达,传统单体项目已经完全不能适应现在互联网用户量需求,2010 刚刚毕业的时候只会 SSH/SSM 就能找到工作,不了解分布式,也没听说过,很多软件公司也是一套框架打天下。如今这个时代已经过去了...

  • 什么是接口测试?怎样做接口测试?

    5.问什么要做接口测试? 6.怎样做接口测试? 7.接口测测试点是什么? 8.接口测试都要掌握哪些知识? 9.其他相关知识? 1.什么是接口? 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,...

  • 你真的了解什么是项目管理吗?

    我们说美国人很愚蠢,为什么呢?你们都考过T或G吧,他们经常会出这么一道题1/3+1/2=? 50%的人回答是2/5,这可是美国研究生入学考试的试题呀!通常在这个问题之前还有一个1/2+1/2=?为什么?他们怕太难了,先给个...

  • maven是什么?用项目来解释它

     1.1、假如你正在Eclipse下开发两个Java项目,姑且把它们称为A、B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢?  很简单,这不就是跟我们之前写程序时一样吗,需要用哪个项目中...

  • 计算机d盘给c盘,怎么把D盘变成系统盘?

    要想把D盘做为系统磁盘,需要重装系统到D盘。方法:(重装前把D盘的重要数据记住备份好)。准备好系统光盘 驱动光盘(如果没有驱动光盘或者找不到,可以事先用驱动精灵或超级兔子或其它工具备份驱动)首先进入BIOS设置光驱...

  • 什么是DDD?

    什么是DDD?DDD的全称叫:Domain-Driven Design,中文名称叫:领域驱动设计,是一种通过将实现连接到持续进化的模型来满足复杂需求的软件开发方法。领域驱动设计的前提是:...

  • 计算机d盘hlddz是啥,hlddzsdk.exe是什么进程?

    电脑任务管理器的进程上面经常会出现一些陌生的进程项目,这些进程项会占用电脑的大量内存和cpu,就比如hlddzSDK.exe进程吧,你们知道是什么进程吗?不知道也没关系。现在就跟大家说说hlddzSDK.exe进程是否可以关闭...

  • 如何修改QT项目的项目名称?

    在对同一个项目中做了不同的修改,而不修改项目名称的条件下,在QT中Recent Projects选项下面的会出现很多同一个项目名称不同功能的项目,从而很难达到见名知意的目的。 二.以一种简单粗暴的方法修改项目的名称 ...

  • 科研(research)与研发(R&D)思维有什么区别?

    来源:https://www.zhihu.com/question/366503145编辑:深度学习与计算机视觉声明:仅做学术分享,侵删即将从大学里的博...

  • 最近大火的C4D,为什么游戏影视建模不用它?

    最近很多小伙伴都在各种平台问我们一个问题:现在大火的3D软件C4D,许多专业的设计师和大牛都在叫好,但为什么很多课程却不教呢?怎么没见到有游戏公司在使用这个软件制作模型呢?它究竟能不能全面代替3Dmax呢?不...

  • 项目管理学习总结(11)——项目管理怎么做

    01 项目管理是什么? 可能你现在对项目管理没有概念,或者觉得它是一个很玄的东西,一部分原因可能是你的项目还没有大到一定程度,一部分原因可能是有人承担起了项目经理的角色。但我觉得,产品经理是一定要懂项目...

  • 一篇文章搞懂什么是测试,测试是干什么的?

    测试现在被普遍认为“保证产品质量”这个笼统的说法下,而测试本身是什么呢?今天我们就测试本身跟大家一起讨论。 测试是在研发产品的整个过程中的一个跟踪活动,他在各个阶段报告给人们当前项目的状况,能够督促和...

  • Android 开源项目和文章集合(更新:2022.03.21)

    什么场景需要修改绘制顺序? https://mp.weixin.qq.com/s/G3BKLbu1gjIIf8-qY6DFBg 3.破解 Kotlin 协程(8) - Android 篇 https://juejin.im/post/5cfe1947e51d45105d63a4e3 4.Android | 《看完不忘系列》之Glide ...

  • 什么是接口测试?为什么要做接口测试?

    为什么要做接口测试?  接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互...

  • 图解:什么是关键路径?

    第九步:访问顶点 ,没有邻接顶点,什么都不做。 这样我们获得一个带权有向无环图中的关键路径: 接下来我们再看完整的代码,我相信小禹禹必定会了然于胸(如果还不懂,建议多点儿耐心,多看几遍景禹辛苦给小禹禹写...

  • 项目管理复习题

    2.项目管理包括(启动过程组)、(计划过程组)、(执行过程组)、(控制过程组)、(收尾过程组)5个过程组。 二、判断题 1、搬家属于项目。(√) 2、项目是为了创造一个唯一的产品或提供一个唯一的服务而进行...

  • 前后端分离的vue项目如何合并?springboot 单体应用

    现在是需求是,这个项目很轻量级,完全没必要部署为两个应用,因此需要重新合并,具体步骤如下: 第一步:vue项目先打包,执行命令:npm run build,执行成功后,会在项目路径下多出一个dist文件夹,里面包含css+js...

  • SpringBoot配置文件是什么?该如何使用?

    文件代码如下: server.port=80 运行一下看看结果,如下图所示,结果是80端口,完全正确 做完了端口的配置,趁热打铁,再做几个配置,目前项目启动时会显示一些日志信息,就来改一改这里面的一些设置。 关闭运行...

  • 软件项目管理复习题库(学生自制非官方)

    每章课后选择题和填空题要做,考试的单选大部分都是里面的原题! 课后选择填空题 第一章 第二章 一、填空题 1、项目立项之后,项目负责人会进行(自造-购买)决策,确定待开发产品的哪些部分应该采购、外包开发...

Global site tag (gtag.js) - Google Analytics