精华内容
下载资源
问答
  • 代码扫描工具

    2019-03-25 16:42:42
    端玛企业级静态源代码扫描分析服务平台(英文简称:DMSCA)是一个独特的源代码安全漏洞、质量缺陷和逻辑缺陷扫描分析服务平台。该平台可用于识别、跟踪和修复在源代码中的技术和逻辑上的缺陷,让软件开发团队及测试...

    端玛企业级静态源代码扫描分析服务平台(英文简称:DMSCA)是一个独特的源代码安全漏洞、质量缺陷和逻辑缺陷扫描分析服务平台。该平台可用于识别、跟踪和修复在源代码中的技术和逻辑上的缺陷,让软件开发团队及测试团队快速、准确定位源代码中的安全漏洞、质量和业务逻辑缺陷等问题,并依据提供的专业中肯的修复建议,快速修复。提高软件产品的可靠性、安全性。同时兼容并达到国际、国内相关行业的合规要求。

    DMSCA是端玛科技在多年静态分析技术的积累及研发努力的基础上,联合多所国内及国际知名大学、专家共同分析全球静态分析技术的优缺点后、结合当前开发语言的技术现状、源代码缺陷的发展势态和市场后,研发出的新一代源代码企业级分析方案,旨在从根源上识别、跟踪和修复源代码技术和逻辑上的缺陷。该方案克服了传统静态分析工具误报率(False Positive)高和漏报(False Negative)的缺陷。打断了国外产品在高端静态分析产品方面的垄断,形成中国自主可控的高端源代码安全和质量扫描产品,并支持中国自己的源代码检测方面的国家标准(GB/T34944-2017 Java、GB/T34943-2017 C/C++、GB/T34946-2017 C#),致力于为在中国的企业提供更直接,更个性化的平台定制和本地化服务。

    DMSCA支持主流编程语言安全漏洞及质量缺陷扫描和分析,支持客户化平台界面、报告、规则自定义,以满足客户特定安全策略、安全标准和研发运营环境集成的需要。产品从面世,就获得了中国国内众多客户的青睐,这些客户包括但不限于银行、在线支付、保险、电力、能源、电信、汽车、媒体娱乐、软件、服务和军事等行业的财富1000企业。

    自主式代码安全扫描分析

    主要是采用国内端玛科技的企业级源代码扫描分析服务平台DMSCA和国际知名的VeraCode源代码扫描分析服务平台。以下是相关服务平台的概述 :

    1. DMSCA-企业级静态源代码扫描分析服务平台
      系统构架
      在这里插入图片描述
      可以通过Internet或者局域网络 从浏览器、Eclipse、Visual Studio 、命令行 、甚至 Web 服务访问DMSCA 服务平台,上传扫描代码,选择扫描策略,自动化扫描, 并利用平台可视化环境 ,审计扫描结果 ,生成审计报告 ,并可以利用平台提供的知识库 ,学习软件安全漏洞 、代码质量缺陷等多方面的知识,加速源代码缺陷修复 。 如需了解更详细信息,下载地址:代码审计网

    2、VeraCode静态源代码扫描分析服务平台

    Veracode静态源代码分析服务平台是全球商业运营最好的平台,全球数千家 软件科技公司都在使用其服务发现软件安全漏洞、质量缺陷。

    在这里插入图片描述
    支持众多主流的开发语言和框架:

    Java

    .NET

    JavaScript & TypeScript (including AngularJS, Node.js, and jQuery)

    Python, Perl, PHP, Ruby on Rails, Scala, ColdFusion, Classic ASP

    iOS (Objective-C and Swift), Android (Java), PhoneGap, Cordova, Titanium, Xamarin

    C/C++ (Windows, RedHat Linux, OpenSUSE, Solaris)

    COBOL, RPG, Visual Basic 6

    1. Fortify SCA 及 Checkmarx
    展开全文
  • Fortify代码扫描工具

    千次阅读 2020-12-26 18:53:03
    Fortify是一款强大的静态代码扫描分析工具,其发现代码漏洞缺陷的能力十分强悍,主要是将代码经过编译,依托于其强大的内置规则库来发现漏洞的。其次fortify SCA团队在开发此商业工具时,也提供了自定义规则的接口,...

    一、Fortify介绍     

     Fortify是一款强大的静态代码扫描分析工具,其发现代码漏洞缺陷的能力十分强悍,主要是将代码经过编译,依托于其强大的内置规则库来发现漏洞的。其次fortify SCA团队在开发此商业工具时,也提供了自定义规则的接口,只要经过正版授权后,便可以在此基础上自定义规则,来增强Fortify SCA的漏洞识别能力,同时经过自定义规则,也可以降低误报,使静态分析的准确度和高效性。

         默认情况下,Fortify SCA使用安装的安全编码规则包来检查源代码,并定义一系列可能出现的问题,如可被攻击者李勇的安全漏洞和不良的编码缺陷。

        安全编码规则中的规则分析受支持语言的核心和扩展的API包中的函数,并将分析结果记录在Fortify SCA中。每一个问题的解释包含了对问题的描述和建议的解决方案,一边更好的解决程序中的漏洞和缺陷。也可以通过创建自定义规则包来准确地分析特定的应用程序,验证专门的安全规则以及细化Fortify SCA所报告的问题。

    二、编写自定义规则原理

    要编写有效的自定义规则,就必须熟悉一直的安全漏洞类别和通常与他们相关的函数类型。深入理解各类经常出现在特定类型漏洞的函数,有利于在编写自定义规则过程中能够准确地找到与安全相关的函数。任何一门语言,都有其庞大的开源框架和lib库。所以自定义规则,既要精通安全漏洞原理,又要熟练掌握一门或几门开发语言,一般自定义规则用的比较多的语言有java、C/C++、PHP等。其次必须识别与安全相关的函数,并熟悉这些函数的特性以此来确定能够体现各个函数具体行为和与之相关的漏洞类别的正确规则形式。一旦确定好了这种联系,使用自定义规则编辑器来创建规则就相对简单了。

    三、自定义规则

    1). 在fortify SCA安装的bin目录下找到打开自定义规则编辑器,CustomRulesEditor.cmd,如下图所示:

    2). 打开编辑器后,选择File ——>Generate Rule,弹出规则向导框。

    3). 自定义规则模板可以按照漏洞类型(Category)和规则类型(Rule Type)进行分类,不管是何种方式分类,这些模板大体上分为,数据污染源tainted规则,数据控制流规则,数据传递规则,以及漏洞缺陷爆发的sink规则。只要理解了这些规则模板,和开发语言的函数特征,建立规则就简单了。

    如下是fortify自定义规则向导中的规则选项:

    1) Access Control: Database  Validation Rule
    定义验证对数据库中所存储的信息的访问权限的函数 (授权函数)。这个规则可以发现与未经授权的访问相关的漏洞Alias Rule
    在安全编码规则包或自定义规则的范围内定义核心和扩展API 所发现的能够模拟其他函数行为的函数。
    2) Allocation Rule
    定义内存分配的函数。这个规则有助于跟踪缓冲区大小并检测 buffer overflow 漏洞
    3) Buffer Overflow Detection Rules for 'scanf' Family of Functions
    定义像 scanf() 家族函数一样运行的函数。这些规则有助于跟踪缓冲区大小并检测 buffer overflow 漏洞
    4) Buffer Overflow Detection Rules for 'sprintf' Family of Functions
    定义像 sprintf() 家族函数一样运行的函数。这个函数可以在格式化字符串中并置多个起始缓冲区,并将格式化字符串的多个内存单位复制到目标缓冲区。这个规则有助于跟踪缓冲区大小并检测 buffer overflow 漏洞

    5) Buffer Overflow Detection Rules for 'strcat' Family of Functions
    定义像 strcat() 家族函数一样运行的函数。它在目标缓冲区的末端并置了多个起始缓冲区的内存单位。这些规则有助于跟踪缓冲区大小并检测 buffer overflow 漏洞
    6) Buffer Overflow Detection Rules for 'strcpy' Family of Functions
    定义像 strcpy() 家族函数一样运行的函数。它可以将多个内存单位从起始缓冲区复制到目标缓冲区。这些规则有助于
    跟踪缓冲区大小并检测 buffer overflow 漏洞
    7) Cross-Site Scripting Sink Rule
    定义在输入参数没有进行适当验证的情况下有可能在浏览器中执行恶意代码的函数
    8) Cross-Site Scripting Source Rule
    定义充当输入源的函数,如果这样的函数没有经过适当的验证,会导致浏览器执行恶意代码。
    9) Cross-Site Scripting Validation Rule
    定义发送到网页前需要进行适当的数据验证的函数
    10) Generic Pass-Through Rule
    定义一个其输入参数会和输出参数交互数据的函数。
    11) Generic Semantic Rule
    定义可能出现的 dangerous function
    12) Generic Sink Rule
    定义在输入参数没有进行适当验证的情况下有可能带来多种安全漏洞风险的函数
    13) Generic Source Rule
    定义充当输入源的函数,如果这样的函数没有经过适当的验证,会导致多种安全漏洞。
    14) Generic Validation Rule
    定义能够针对多种安全漏洞而进行适当验证的函数
    15) HTTP Response Splitting Sink Rule
    定义在输入参数没有进行适当验证的情况下有可能破坏 HTTP 响应头文件的函数
    16) HTTP Response Splitting Validation Rule
    定义加入 HTTP 响应头文件之前已进行适当的数据验证的函数
    17) Integer Overflow Sink Rule
    定义易于发生 integer overflow 漏洞的函数,这种漏洞会在输入参数验证不当的情况下导致逻辑错误和 buffer overflow。
    18) Log Forging Sink Rule
    定义在输入参数没有进行适当验证的情况下有可能向日志文件写入恶意或伪造条目的函数
    19) Pass-Through Rule that Indicates that Outgoing Value does not End with a Newline Character
    定义未在输出参数中附加换行符的参数
    20) Pass-Through Rule that Indicates that Outgoing Value does not End with a Null Character
    定义没有适当地以 "\0" 结束输出缓冲区的函数
    21) Pass-Through Rule that Indicates that Outgoing Value Ends with a Newline Character
    定义在输出参数中附加换行符的参数
    22) Pass-Through Rule that Indicates that Outgoing Value Ends with a Null Character
    定义适当地以 "\0" 结束输出缓冲区的函数

    23) Pass-Through Rule that Indicates  that Outgoing Value is  Deobfuscated
    定义充当去模糊化例程的函数
    24) Pass-Through Rule that Indicates  that Outgoing Value is not  Numeric
    定义处理输入参数的函数,以使其输出参数不为数字。
    25) Pass-Through Rule that Indicates that Outgoing Value is Numeric
    定义处理输入参数的函数,以使其输出参数为数字。
    26) Pass-Through Rule that Indicates  that Outgoing Value is Poorly  Encrypted
    定义对输入参数所执行的加密方式较差的函数,如基于 64位的编码。
    27) Pass-Through Rule that Indicates  that Outgoing Value Represents  the Length of the String
    定义输出参数可以表示字符串长度的函数
    28) Password Management Sink Rule
    定义采用永远不会被破译或去模糊化的明文密码作为参数的函数
    29) Password Management: Weak Cryptography Sink Rule
    定义采用加密方式较差的密码作为参数的函数
    30) PCI Violation Sink Rule
    定义有可能将信用卡数据显示给攻击者的函数
    31) PCI Violation Source Rule
    定义将信用卡数据引入应用程序的函数
    32) PCI Violation Validation Rule
    定义信用卡数据显示给攻击者前可以对这些数据进行适当验证的函数
    33) Privacy Violation Sink Rule
    定义在输入参数处理不当的情况下由于向攻击者显示私人信 息而导致可能危及用户隐私的函数
    34) Privacy Violation Source Rule
    定义作为私人数据源的函数,如果处理不当,会危害用户隐私。
    35) Privacy Violation Validation Rule
    定义能适当处理私人数据且不会危及用户隐私的函数。
    36) SQL Injection Sink Rule
    定义在输入参数没有进行适当验证的情况下有可能执行恶意SQL 或对数据库所存储的数据提供未经授权的访问权限的函数
    37) SQL Injection Source Rule
    定义充当输入源的函数,如果这样的函数没有经过适当的验证,会导致 SQL 被注入到数据库查询中。
    38) SQL Injection Validation Rule
    定义在利用数据进行 SQL 查询之前能够对这些数据进行适当验证的函数
    39) String Length Rule
    定义能够计算字符串长度的函数。这个规则有助于跟踪字符串的长度,以便检测 buffer overflow 漏洞。
    40) String Termination Error Sink Rule
    定义在输入参数没有适当地以 "\0" 结尾的情况下可能会容易导致 buffer overflow 漏洞
    41) String Termination Error Source Rule
    定义由于输入数据源没有适当地以 "\0" 结尾而容易导致buffer overflow 漏洞。

    42) String Termination Error Validation Rule
    定义适当地以 "\0" 结束缓冲区的函数。
    43) System Information Leak Sink Rule
    定义在输入参数处理不当的情况下可能向攻击者显示有用的系统信息的函数
    44) System Information Leak Source Rule
    定义作为系统信息数据源的函数,如果处理不当,会向攻击者泄漏有用的数据。
    45) System Information Leak Validation Rule
    定义能够适当处理系统数据的函数

    4) .选择规则包语言,点击next,然后填写报名,类名,函数名

    5). 点击next,设置sink点

    四. 运行自定义规则

    需要将编写好的自定义规则包放在Fortify SCA指定的文件夹下方可生效。默认一般是在${FortifyInstall}/Core/config/customrules/目录下。你可以在${FortifyInstall}/Core/config/fortify-sca.properties进行配置自定义路径

    五、Fortify代码扫描使用教程

    1、进入Fortify安装目录,再进入bin目录,双击auditworkbench.cmd启动程序

    2、打开扫描窗口,点击Scan Java Project

    3、选择要扫描的项目目录,点击确定按钮

    4、弹出java代码版本选择窗口,选择版本后,点击OK

    5、弹出审计向导窗口,点击Scan按钮开始扫描

    6、扫描开始,等待扫描结束,等待时间根据项目大小而定,可能时间会很长

    7、扫描结束后,显示扫描结果。到此使用Fortify 17.10进行源代码漏扫的方法就介绍完了。

    初始fortify,还存在很多认知的不足,欢迎路过的伙伴们留言指正。。。望不吝赐教!!!

    展开全文
  • 静态代码扫描工具汇总

    千次阅读 2019-11-22 09:44:42
    而静态代码扫描工具能够在代码构建过程中帮助开发人员快速、有效的定位代码缺陷并及时纠正这些潜在的问题。 通过调研,本文将着重介绍几款常用的静态代码扫描工具,这些工具分为几类: 轻量级静态代码扫描工具:Cpp...

    一、概述

    在软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。传统的代码评审、同事复审,通过人工方式来检查缺陷仍然是一件耗时耗力的事情。而静态代码扫描工具能够在代码构建过程中帮助开发人员快速、有效的定位代码缺陷并及时纠正这些潜在的问题。
    通过调研,本文将着重介绍几款常用的静态代码扫描工具,这些工具分为几类:
    轻量级静态代码扫描工具:CppcheckTscancode
    插件嵌入式扫描工具:SourceInsight_ScanPC-lint
    Linux环境下扫描工具:splint
    平台扫描工具:SonarQube

    二、Cppcheck

    1、软件介绍
    Cppcheck是C/C++代码的静态分析工具。它提供独特的代码分析来检测bug,并着重于检测未定义的行为和危险的编码结构,目标是只检测代码中的实际错误。
    官方网站:http://cppcheck.net/
    一些使用方法博客:https://www.oschina.net/p/cppcheck

    2、检查点
    1)自动变量检查
    2)数组的边界检查
    3)class类检查
    4)过期的函数,废弃函数调用检查
    5)异常内存使用,释放检查
    6)内存泄漏检查,主要是通过内存引用指针
    7)操作系统资源释放检查,中断,文件描述符等
    8)异常STL 函数使用检查
    9)代码格式错误,以及性能因素检查

    3、Windows版本界面风格
    在这里插入图片描述
    4、总结
    Cppcheck 这款工具安装简单,能够在Linux,windows环境上运行,Linux版本安装详见官网。工具支持单个文件检查,目录检查(不支持中文目录),使用简单,方便。

    三、Tscancode

    1、软件介绍
    TscanCode是腾讯出品的开源静态代码扫描工具,旨在助力开发与测试人员从代码层面挖掘问题,将那些长期困扰项目的诸如空指针宕机等问题,扼杀于萌芽阶段。支持用户根据不同需求自定义配置检查项,有极强的扩展性和可维护性。平均扫描速度10W行/分钟。
    官方下载地址:https://github.com/Tencent/TscanCode
    详细使用博客参考:https://blog.csdn.net/liweibin812/article/details/84544750

    2、检查点
    1)空指针检查
    2)数据越界
    3)内存泄漏
    4)逻辑错误
    5)可疑代码检查
    6)运算错误

    3、windows版本界面风格
    1)软件界面
    支持单文件扫描,目录扫描,选定一个目录后,可以重复多次扫描。
    在这里插入图片描述
    2)扫描结果查看界面
    界面简洁,可以选择查看错误类型,可以显示错误代码上下文。
    在这里插入图片描述
    3)配置规则界面
    支持多种语言,多种规则的选择,使用灵活。
    在这里插入图片描述
    4、总结
    TScanCode这款工具安装简单,能够在mac、Linux、windows环境上运行。工具提供友好的结果展示及误报屏蔽等功能,误报率低、问题定位准确,能够高效的发现问题。此外该工具稳定性较好,由腾讯开发团队持续维护。

    四、SourceInsight_Scan

    1、软件介绍
    SourceInsight_Scan是一款集成在 SourceInsight 中的c/c++代码静态分析插件,集成了cppcheck,coverity,pclint等业界优秀的静态分析工具的优点。旨在帮助开发人员,在 IDE 中快速发现编译器无法发现的非语法错误,降低修复成本。无需编译,平均扫描速度高达10W行/分钟,快速发现潜在的质量风险,平均准确率高达80%。
    官方网站:https://sourceforge.net/projects/siscan/
    安装使用说明参考:https://blog.csdn.net/sheji105/article/details/88988619

    2、检查点
    1)空指针检查
    2)数据越界
    3)内存泄漏
    4)逻辑错误

    3、嵌入source insight 界面
    1)嵌入source insight
    嵌入效果如下,可以指定当前文件,也可以扫描目录。
    在这里插入图片描述
    4、总结
    SourceInsight_Scan嵌入到SourceInsight中,能够方便快捷的发现一些非语法错误,对于使用SourceInsight编程的开发人员提供了便利。但是相对于Cppcheck, Tscancode 来讲,检查出问题能力稍弱。该工具安装简单,配置稍微繁琐,使用简单。

    五、PC-lint

    1、软件介绍
    PCLint是GIMPELSOFTWARE公司研发的C/C++软件代码静态分析工具,可以说,PCLint是一种更加严格的编译器。其主要分为PCLint和FlexeLint,PCLint主要应用于Windows平台,以二进制可执行文件提供,而FlexeLint应用于其他平台,例如Linux,以源代码形式发布。 PCLint不但能够对程序进行全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针连同冗余的代码,还能够有效地提出许多程序在空间利用、运行效率上的改进点。
    官网:http://www.gimpel.com/html/index.htm
    最新安装包:http://download.csdn.net/detail/winking324/8162819
    安装配置参考:https://blog.csdn.net/feng_ma_niu/article/details/40631521
    详细介绍文档参考:http://www.docin.com/p-31343126.html?docfrom=rrela

    2、检查点
    1) 空指针检查
    2) 数组越界
    3) 内存泄漏
    4) 强类型检查
    5) 变量值跟踪
    6) 赋值顺序检查
    7) 弱定义检查
    8) 格式检查
    9) 缩进检查
    10)const变量检查
    11)volatile变量检查

    3、嵌入Source Insight界面
    1)嵌入source insight中使用
    在这里插入图片描述
    2)扫描结果
    在这里插入图片描述
    5、总结
    PC-lint功能强大,检查详细,使用时需要包含当前文件中链接的所有头文件,配置操作比较复杂,但是配置完成后会轻松一点。该软件安装复杂,可以嵌入到source insight中。

    六、splint

    1、软件介绍
    splint是一个GNU免费授权的 Lint程序,是一个动态检查C语言程序安全弱点和编写错误的程序。Splint会进行多种常规检查,包括未使用的变量,类型不一致,使用未定义变量,无法执行的代码,忽略返回值,执行路径未返回,无限循环等错误。
    官网:http://splint.org/
    安装参考文档:https://blog.csdn.net/sunjiajiang/article/details/7368684
    splint需安装automake-1.6支持

    2、检查点
    1)空指针检查
    2)类型检查
    3)内存管理
    4)缓存边界
    5)宏
    6)函数接口
    7)控制流

    3、Linux环境下使用展示
    在这里插入图片描述
    4、总结
    Splint简单易用,但扫描文件需要包含所有的头文件,所有的变量声明必须在上面。安装稍微繁琐。 splint提供了三种方式可进行检查的控制,分别是.splintrc配置文件、flags标志和格式化注释,需要一定的学习成本。

    七、SonarQube

    1、软件介绍
    SonarQube我们可以检测出项目中重复代码, 潜在bug, 代码规范,安全性漏洞等问题。可以通过使用scanner,通过配置文件,修改项目信息,在命令行中调用scanner工具,进行扫描,并推送给sonarqube,通过SonarQube web UI展示出来。
    官网下载地址:https://www.sonarqube.org/downloads/ (7.9版本支持中文语言包)
    c/c++代码规则插件下载:https://github.com/SonarOpenCommunity/sonar-cxx/releases
    配置免费c/c++代码规则插件参考:https://blog.csdn.net/ZYzffffff/article/details/82466660
    SonarQube的安装、配置与使用:https://www.cnblogs.com/qiumingcheng/p/7253917.html

    2、检查点
    1)内存泄漏
    2)死循环
    3)逻辑流程错误
    4)空指针引用
    5)编码规范
    6)错误处理

    3、使用界面
    1)启动sonarqube服务成功如下图:
    在这里插入图片描述
    2)本地web页面
    在这里插入图片描述
    3)问题界面
    在这里插入图片描述

    4、总结
    SonarQube功能强大,配置比较复杂(需要jdk支持、安装中文包,安装c/c++规则插件)。目前的试用情况来看,c代码检查项目详细,规则配置较多,功能完善,但是检查似乎有点问题,详见结果展示。页面显示清晰明了,但需要一定的时间熟悉操作。

    展开全文
  • 文章目录关于静态代码扫描工具Lint的简单使用一、Lint 与 IDE 的结合使用二、Lint 与 gradle 命令的结合使用具体位置如下图:生成的HTML在浏览器打开如图:自定义 Lint为什么需要自定义 Lint?Lint 需要自定义检查的...

    关于静态代码扫描工具

    在我们项目迭代过程中,线上问题频繁发生。开发时很容易写出一些问题代码,例如 Serializable 的使用:实现了 Serializable 接口的类,如果其成员变量引用的对象没有实现 Serializable 接口,序列化时就会 Crash。再例如,如果 XML 资源文件包含未使用的命名空间,则不仅占用空间,还会导致不必要的处理。其他结构问题,例如使用目标 API 版本不支持的已弃用的元素或 API 调用等,可能导致代码无法正常运行。所以为了进一步减少问题发生,我们逐步完善了一些规范,包括制定代码规范,加强代码 Review,完善测试流程等。但这些措施仍然存在各种不足,包括代码规范难以实施,沟通成本高,因此其效果有限,相似问题仍然不时发生。

    有没有办法从技术角度减少或减轻上述问题呢?

    我们调研发现,静态代码检查是一个很好的思路。静态代码检查框架有很多种,例如 FindBugs、PMD、Coverity,主要用于检查 Java 源文件或 class 文件;再例如 Checkstyle,主要关注代码风格;但我们最终选择从 Lint 框架入手,因为它有诸多优势:

    • Lint 工具可检查 Android 项目源文件是否包含潜在错误,以及在正确性、安全性、性能、易用性、便利性和国际化方面是否需要优化改进。并且支持 class 文件、资源文件、Gradle 等文件的检查。

    • 扩展性强,支持开发自定义 Lint 规则

    • 配套工具完善,Android Studio、Android Gradle 插件原生支持Lint工具。

    • Lint 专为 Android 设计,原生提供了几百个实用的 Android 相关检查规则。

    Lint的简单使用

    一、Lint 与 IDE 的结合使用

    点击 Analyze 的 Inspect Code 选项,即可开启 lint 检查,在Inspection窗口中可以看到lint检查的结果。并且 android 自带的lint规则的更改可以在 Setting 的 Edit 选项下选择 Inspections(File > Settings > Project Settings),对已有的 lint 规则进行自定义选择。

    二、Lint 与 gradle 命令的结合使用

    AS 的控制台,进入要使用 Lint 检查规则的模块目录,使用 gradle lint 命令。输出的结果会生成一个 xml 以及 HTML(可以在浏览器打开,页面非常简单直观)。路径信息也可以在控制台看到,比如我的就是:

    Wrote HTML report to file:///D:/cccx_3.0/app/build/reports/lint-results.html
    Wrote XML report to file:///D:/cccx_3.0/app/build/reports/lint-results.xml

    具体位置如下图:

    在这里插入图片描述

    生成的HTML在浏览器打开如图:

    在这里插入图片描述


    自定义 Lint

    为什么需要自定义 Lint?

    由于每个业务线自身的需求,Lint 默认的检查项目可能不能满足我们的需求。 比如司机端一个自定义控件需要抽成一个库给其他项目使用,但是我们希望使用者必须在 XML 中定义一个属性,否则组件无法正常运行,我们希望Lint能够对此进行检查,并在忘记添加此属性时给出明确的错误提示。
    再比如,我们的基础组件有一个日志库,能够方便的在 release 版本中关闭日志输出,还能够把日志输出到指定的文件中方便事后分析,这时如果来了一个新同学,他可能还是习惯性的用 android.util.Log 来打印日志,我们希望能够检测到本项目中所有使用了 android.util.Log 的代码,并发出警告。 要满足这些自定义需求,我们就需要通过 Android Lint 的扩展机制自己定制 Lint 规则。

    Lint 需要自定义检查的问题

    一、Crash 预防

    Crash 率是我们司机端和乘客端的最重要的指标之一,我们期望使用 Lint 检查出一些潜在的 Crash,例如:

    • 原生的 NewApi,用于检查代码中是否调用了 Android 高版本才提供的 API。在低版本设备中调用高版本 API 会导致 Crash。
    • 实现了 Serializable 接口的类,如果其成员变量引用的对象没有实现 Serializable 接口,序列化时就会Crash。
    • 调用 Color.parseColor() 方法解析后台下发的颜色时,颜色字符串格式不正确会导致 IllegalArgumentException

    二、Bug 预防

    由于目前 Bug 数已经作为部门衡量的指标,我们也期望使用 Lint 来检车和预防,例如:

    • 所有的页面跳转使用统一的路由 UXRouter,并且 PATH 维护在统一的常量类里方便查阅和修改。
    • 使用 Fastjson 解析 JSON 数据时,用基础类型来接收的不要用get包装类型的方法。比如: getInteger()getIntValue()

    三、性能/安全问题

    对于司机端和乘客端来讲,性能和安全非常重要。我们期望使用Lint来检测一些可以规避的影响性能和安全的问题,例如:

    • 使用 PendingIntent 时,使用了空 Intent 会导致恶意用户劫持修改 Intent 的内容。所以使用 PendingIntent 时,禁止使用空 intent,同时禁止使用隐式 Intent。
    • 在 Android API level 8 以后增加了 android:allowBackup 属性值。默认情况下这个属性值为 true,故
      当 allowBackup 标志值为 true 时,即可通过 adb backup 和 adb restore 来备份和恢复应用程序数据。所以就需要强制将 android:allowbackup 属性设置为 false,防止 adb backup 导出数据。

    四、代码编写规范

    对于代码的编写规范之前已经讨论过并且给出了具体的实行方案,我们希望使用 Lint 来检测以便于减少沟通成本,Code Review 的时间以及新人的学习成本。例如:

    • 对 Activity 的命名和 Fragment 的命名,不要使用简写 Act、Frg 等。
    • 资源文件命名需要按照规范加入模块作为前缀,防止不同模块之间的资源文件名冲突。

    参考美团的方案针对 Lint 实施的思考

    1. 明确优先级,代码检查报告中重点体现高优先级问题,屏蔽无关紧要的问题
    2. 高优问题,强制要求开发者修复,否则代码不予提交。
    3. 执行时机可选。以下列出针对 Lint 执行时机的一些参考:
      • 编码阶段IDE实时检查,第一时间发现问题
      • 本地编译时,及时检查高优先级问题,检查通过才能编译
      • 提代码时,CI 检查所有问题,检查通过才能合代码
      • 打包阶段,完整检查工程,确保万无一失

    开发自定义 Lint 前的准备工作

    Android SDK

    Android SDK 中涉及 Lint 的主要有下面几个包,均包含在 Android Gradle 插件 com.android.tools.build:gradle 中。

    1. com.android.tools.lint:lint-api:这个包提供了 Lint 的 API,包括 Context、Project、Detector、Issue、IssueRegistry 等,后面会做介绍。
    2. com.android.tools.lint:lint-checks:这个包含了 Lint 支持的200多种规则。
    3. com.android.tools.lint:lint:这个包用于运行 Lint 的检查:
      • com.android.tools.lint.XxxReporter:检查结果报告,包括纯文本、XML、HTML 格式等
      • com.android.tools.lint.LintCliClient:用于在命令行中执行 Lint
      • com.android.tools.lint.Main:这个类是命令行版本 Lint 的 Java 入口(Command line driver),主要是解析参数、输出结果
    4. com.android.tools.build:gradle-core:这个包提供 Gradle 插件核心功能,其中与 Lint 相关的主要有:
      • com.android.build.gradle.tasks.Lint: Gradle 中 Lint 任务的实现
      • com.android.build.gradle.internal.LintGradleClient:用于在 Gradle 中执行 Lint,集成自 LintCliClient
      • com.android.build.gradle.internal.LintGradleProject:继承自 lint-api 中的 Project 类。Gradle 执行 Lint 检查时使用的 Project 对象,可获取 Manifest、依赖等信息。其中又包含了 AppGradleProjectLibraryProject 两个内部类。

    ###Lint 的主要API

    Lint 规则通过调用 Lint API 实现,其中最主要的几个 API 如下:

    1. Issue:问题的描述,其实就是表示一个 Lint 规则。
    2. Detector:中文是探测器。顾名思义,用于检测并报告代码中的 Issue,每个 Issue 都要指定 Detector。
    3. Scope:翻译过来是表示范围的意思。这是用于声明 Detector 要扫描的代码范围,例如 JAVA_FILE_SCOPECLASS_FILE_SCOPERESOURCE_FILE_SCOPEGRADLE_SCOPE 等,一个 Issue 可包含一到多个 Scope。
    4. Scanner:翻译过来就是扫描器的意思。用于扫描并发现代码中的 Issue,每个 Detector 可以实现一到多个 Scanner。
    5. IssueRegistry: Lint 规则加载的入口,提供要检查的 Issue 列表。

    如果要查看 lint 工具支持的 issue 的完整列表和它们所对应的 issue ID,可以使用 lint --list 命令。

    Lint 中包括多种类型的 Scanner 如下,其中最常用的是扫描 Java 源文件和 XML 文件的 Scanner:

    • JavaScanner / JavaPsiScanner / UastScanner:扫描 Java 源文件
    • XmlScanner:扫描 XML 文件
    • ClassScanner:扫描 class 文件
    • BinaryResourceScanner:扫描二进制资源文件
    • ResourceFolderScanner:扫描资源文件夹
    • GradleScanner:扫描 Gradle 脚本
    • OtherFileScanner:扫描其他类型文件

    我们需要注意的是,扫描Java源文件的Scanner先后经历了三个版本:

    1. 最开始使用的是 JavaScanner,Lint 通过 Lombok 库将 Java 源码解析成 AST(抽象语法树),然后由 JavaScanner 扫描。
    1. 在Android Studio 2.2和 lint-api 25.2.0版本中,Lint工具将 Lombok AST 替换为 PSI,同时弃用 JavaScanner,推荐使用 JavaPsiScanner。
    1. 在 Android Studio 3.0和 lint-api 25.4.0 版本中,Lint 工具将 PSI 替换为 UAST,同时推荐使用新的 UastScanner
      UAST 是 JetBrains 在 IDEA 新版本中用于替换 PSI 的 API。UAST 跟加语言无关,除了支持 Java,还可以支持 Kotlin.

    扩展 —— 关于 PSI 的介绍在这里


    自定义 Lint 规则的流程

    自定义 Lint 和编写 gradle 插件一样,是一个纯 Java 项目,以 jar 的形式提供依赖。有了包含 Lint 规则的 jar 后,有两种使用方案:

    • 方案一:把此 Jar 拷贝到 ~/.android/lint/ 目录中(文件名任意)。此时,这些 Lint 规则针对所有项目生效。
    • 方案二:继续创建一个 Android library 项目,用来输出包含 Lint.jar 的 aar;然后,让目标项目依赖此 aar 即可使自定义 Lint 规则生效。

    由于方案一是全局生效的策略,无法单独针对目标项目,用处不大。在工程实践中,我们主要使用方案二。

    aar 是 Android Library 的一种新的二进制分发格式,它把资源也一起打包,这样一来图片和布局资源文件也能够被同时分发。aar 格式文件能够包含一个可选的 lint.jar 文件,如果一个 app 依赖了一个包含 lint.jar 的 aar 文件,那么这个 lint.jar 中的规则就会在 app 的 lint 任务中被用来做lint检查。

    下面是一个自定义 Lint 项目的目录结构:
    在这里插入图片描述
    主要包含了两个部分:

    • lintjar 主要是编写自定义 Lint 的规则,编译后生成 Lint.jar 文件
    • lintaar 主要将 Lint.jar 打包成 aar 方便引用

    下面着重于如何编写自定义规则,也就是我们 lintjar 这个 module 的开发

    一 、创建 Java 工程,配置 Gradle

    apply plugin: 'java'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        compile 'com.android.tools.lint:lint-api:25.3.0'
        compile 'com.android.tools.lint:lint-checks:25.3.0'
        compile 'com.android.tools.build:gradle-core:2.3.3'
        compile 'com.android.tools.lint:lint:25.3.0'
    }
    
    jar {
        manifest {
            attributes("Lint-Registry": "com.customer.lint.core.MyIssueRegistry")
        }
    }
    
    configurations {
        lintChecks
    }
    
    dependencies {
        lintChecks files(jar)
    }
    
    //指定编译的编码
    tasks.withType(JavaCompile){
        options.encoding = "UTF-8"
    }	
    

    这里只需要注意下 Lint-Registry 是透露给lint工具的注册类的方法,也就是说 MyIssueRegistry 是 Lint 工具的入口,并且也通过 jar 这个命令来打包。

    二 、选定一个规则用 Lint 实现

    先用一个简单实现为例:
    在这里插入图片描述
    如图,我们看到简单实现一个检测 Log 的规则非常简单:

    • 继承 Detector,并实现相应的 Scanner 接口
    • 实例化 Issue 对象
    • 使用 Lint 的 API 扫描代码、定义规则,也就是我们实现的 Scanner 接口。

    -------------------------------------------下面重点介绍实现过程和对应的源码 Api 分析-------------------------------

    Issue

    Issue 由 Detector 发现并报告,是我们自己定义的需要统一的代码规则、代码优化点。Issue对象使用静态工厂方法构造实例对象,其方法参数的意义如下:

    1. id:唯一值,应该能简短描述当前问题。利用 Java 注解或者 XML 属性进行屏蔽时,使用的就是这个 id,所以最好使用英文。

    2. briefDescription:简短的总结,尽量控制在10字以内,描述问题而不是修复措施。

    3. explanation:完整的问题解释和修复建议。

    4. category:问题类别。在 API 当中已经定义当包括:CORRECTNESS(正确性)、SECURITY(安全性)、PERFORMANCE(性能)、USABILITY(易用性)、A11Y(便利性)、I18N(国际化),还有几个隶属于这些大类别中的子类别,详情可查阅源码 com.android.tools.lint.detector.api.Category

    5. priority:优先级。1-10 的数字,10 为最重要/最严重

    6. Implementation:为 Issue 和 Detector 提供映射关系,Detector 就是当前 Detector。声明扫描检测的范围 Scope,Scope 用来描述 Detector 需要分析时需要考虑的文件集,包括:Resource 文件或目录、Java 文件、Class 文件。


    划重点 --> Scanner

    自定义 Detector 的实际核心逻辑部分就是实现什么样的 Scanner 接口以及 Scanner 中的方法实现。上文也有说明,目前常用的是扫描 Java 源文件和 XML 文件的 Scanner,下面就以 JavaPsiScanner 和 XmlScaner 为例介绍一下关键 Api ,其他的目前由于没有精力研究,暂且搁置

    JavaPsiScanner

    下面是 JavaPsiScanner 这个扫描器的 6 组 12 个回调方法:

    1. createPsiVisitor() 构造一个代码访问器。一个 Detector 对象必须通过这个方法返回一个代码访问器对象,除非 Detector 对象的 appliesToResourceRefs() 返回了 True 或者 getApplicableMethodNames() 返回的不是 Null

    2. getApplicablePsiTypes() 返回访问器需要访问的Java元素类型。

    3. getApplicableMethodNames()visitMethod() 一般配对使用,访问特定方法

    4. getApplicableConstructorTypes()visitConstructor() 配对使用,访问特定构造器

    5. getApplicableReferenceNames()visitReference() 配对使用,访问特定的引用

    6. applicableSuperClasses()checkClass() 访问特定的超类

    7. appliesToResourceRefs()visitResourceReference() 访问 Java 代码中的资源引用,例如 R.layout.main

    用法可以参考 Lint 源码 com.android.tools.lint.checks.LayoutInflationDetectorcom.android.tools.lint.checks.StringFormatDetector

    在实际编码过程中,仅知道 Api 的作用是不够的,还需要知道 Api 接口的返回参数是做什么的,这个也非常关键:

    • JavaContext 这个是在代码扫描的时候获得 Java 文件的一个上下对象。其中核心方法包括:

      • report() 检查的规则命中之后上报就需要调用这个方法

      • getLocation() 返回传入元素的位置,可以帮助我们定位需要报告问题的代码区域

      • getProject() 返回一个 project 对象。这个是 JavaContext 继承过来的方法,当我们需要了解一些 project 的属性,比如编译版本之类的信息的时候,这个对象就会很有用

      • getEvaluator() 返回一个 JavaEvaluator对象,用于帮助分析具体的java源文件元素

    • JavaEvaluator 这个对象可以帮助我们分析 Java 源文件,在自定义 lint 规则的时候,所有的 Java 源文件元素都被抽象成了另一种语法树结构表示,在新的 API 版本当中,这种语法树结构使用的是 interllij 的 java-psi 的 API。

      • extendsClass() 判断某个对象是否继承于某个类

      • implementsInterface() 判断某个对象是否实现某接口

      • inheritsFrom() 以上两个的结合版

      • methodMatches() 某个方法是否与某个类当中的方法匹配

    • Java-psi 的语法树抽象和 Java 元素的映射关系:

      • PsiClass -> 类
      • PsiMethod -> 方法
      • PsiField -> 字段属性
      • PsiVariable -> 变量(方法参数、属性、本地变量)
      • PsiExpression -> 表达式

    XmlScaner

    举个例子,ResourceXmlDetector 就是实现了 XmlScaner的 一个Detector,扫描 Xml 文件并获取 Xml Dom 元素以执行检查。

    1. createPsiVisitor() :构造一个代码访问器。一个 Detector 对象必须通过这个方法返回一个代码访问器对象,除非 Detector 对象的 appliesToResourceRefs() 返回了 True 或者 getApplicableMethodNames() 返回的不是 Null。

    2. getApplicableElements() 返回的是指定检查的元素(可以是多个)。

    3. visitElement() 这个方法在 XmlScanner 扫描到了对应的元素时调用。如代码,我在这里添加了自己的逻辑,当扫描 Textview 时,会去判断是否含有 textAppearance,如果没有的话就抛出自定义的 Issue。

    4. 再介绍几个用到的方法,context.report() 是用于报告问题并生成报告的,context.getLocation() 精确的定位出现问题的位置,包含文件路径,行号,列数。

    这里附上 Lint 的 API 文档,点击查看

    实践

    实践一

    了解了这么多,其实还是得归于实践,关于自定义 Lint 规则的 demo 网上都是千篇一律,不是检测 Log 就是检测 Thead,部分还是老的实现方式(实现的 JavaScanner 接口),而我们现在是基于 JavaPsiScanner 实现的扫描器。以下是我的实践结果,检测 Color.parseColor() 避免解析的字符串格式不正确导致抛出异常。

    另外。代码中包含注释,可以结合 API 说明与代码一起看。

    /**
     * @ProjectName: AndroidLint-master
     * @Package: com.paincker.lint.core
     * @Author: yao.dang
     * @CreateDate: 2019/3/6 15:49
     * @UpdateUser: 更新者
     * @UpdateDate: 2019/3/6 15:49
     * @UpdateRemark: 更新说明
     */
    public class ColorParseDetector extends Detector implements Detector.JavaPsiScanner {
    
    
        public static final String ISSUE_ID = "ColorParse";
    
        public static final String ISSUE_DESCRIPTION = "避免 parseColor 解析出现异常";
    
        public static final String ISSUE_EXPLANATION = "当解析错误时会抛出异常,请加入try catch防护";
    
        public static final Category  ISSUE_CATEGORY = Category.SECURITY;
    
        /**
         * 优先级,1到10的数字,10是最重要/最严重的
         */
        private static final int ISSUE_PRIORITY = 6;
    
        private static final Severity ISSUE_SEVERITY = Severity.ERROR;
    
        /**
         * 特定的方法名
         */
        static final String PARSECOLOR = "parseColor";
    
        public static final Issue ISSUE = Issue.create(
                ISSUE_ID,
                ISSUE_DESCRIPTION,
                ISSUE_EXPLANATION,
                ISSUE_CATEGORY,
                ISSUE_PRIORITY,
                ISSUE_SEVERITY,
                new Implementation(ColorParseDetector.class, Scope.JAVA_FILE_SCOPE)
        );
    
        @Override
        public List<String> getApplicableMethodNames() {
            return Collections.singletonList(PARSECOLOR);
        }
    
        @Override
        public void visitMethod(JavaContext context, JavaElementVisitor visitor, PsiMethodCallExpression call, PsiMethod method) {
            //如果方法名不一致就不走判断逻辑
            if (method.getName().equals(PARSECOLOR)) {
                JavaEvaluator evaluator = context.getEvaluator();
                //接着要确定是哪个类的方法
                if (evaluator.isMemberInClass(method, "android.graphics.Color")) {
                    /**
                     * 在AST抽象语法树中,调用 parseColor 的节点应该是 try 的子节点,
                     * 向上追溯,查到的对应的是 Try 那么就说明已经在调用 parseColor 前做了try-catch处理
                     */
                    PsiElement psiElement = PsiTreeUtil.getParentOfType(method, Try.class);
                    if (psiElement == null) {
                        context.report(ISSUE,
                                context.getLocation(call.getMethodExpression()),
                                ISSUE_EXPLANATION
                        );
                    }
                }
            }	
        }
    }
    

    实践二

    在实践的过程中,有一点必不可少,那就是调试。普通的 debug 调试大家应该都没问题,但是对于 aar 的调试呢,如果不了解的话,可以看下文:

    首先,打开Run -> Edit Configuration 然后点击加号,创建一个 Remote 的配置,注意要将 JVM 命令拷贝。
    在这里插入图片描述
    然后,在右边的 gradle 状态栏,找到主工程下的 assembleDebug,右键 create 一个新的 Run Configurations,将上一步拷贝的内容粘贴到 VM Options 内,注意要将 suspend 对应的值改为 y。
    在这里插入图片描述

    最后,双击上一步新生成的调试任务,这时候就会进入挂起状态等待调试,接着在状态栏切换到之前未命名的 Remote 任务,点击右侧的 debug 调试按钮,就可以进入调试流程了,当然,你需要提前打好断点。
    在这里插入图片描述

    后续会附上demo 以及其他规则的实现过程

    展开全文
  • TscanCode是一款静态代码扫描工具,TscanCode旨在助力开发与测试人员从代码层面挖掘问题,将那些长期困扰项目的诸如空指针宕机等问题,扼杀于萌芽阶段。支持用户根据不同需求自定义配置检查项,有极强的扩展性和可...
  • 四款优秀的源代码扫描工具简介

    千次阅读 2020-12-18 16:56:06
    端玛企业级静态源代码扫描分析服务平台(英文简称:DMSCA)是一个独特的源代码安全漏洞、质量缺陷和逻辑缺陷扫描分析服务平台。该平台可用于识别、跟踪和修复在源代码中的技术和逻辑上的缺陷,让软件开发团队及测试...
  • 静态代码扫描工具—— TScanCode

    千次阅读 2020-12-17 01:26:34
    逻辑错误,重复的代码分支,bool类型和INT进行比较,表达式永远True或者false等共18类检查; 可疑代码检查,if判断中含有可疑的=号; 运算错误,判断无符号数小于0,对bool类型进行++自增等,共计11类检查。 二、...
  • 静态代码分析是指无需运行被测代码,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针...
  • 4种java代码扫描工具分析

    千次阅读 2013-12-26 18:05:41
    简介本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具(Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,希望能够帮助 Java ...
  • 端玛企业级静态源代码扫描分析服务平台(英文简称:DMSCA)是一个独特的源代码安全漏洞、质量缺陷和逻辑缺陷扫描分析服务平台。该平台可用于识别、跟踪和修复在源代码中的技术和逻辑上的缺陷,让软件开发团队及测试...
  • 端玛企业级静态源代码扫描分析服务平台(英文简称:DMSCA)是一个独特的源代码安全漏洞、质量缺陷和逻辑缺陷扫描分析服务平台。该平台可用于识别、跟踪和修复在源代码中的技术和逻辑上的缺陷,让软件开发团队及测试...
  • 逻辑错误,重复的代码分支,bool类型和INT进行比较,表达式永远True或者false等共18类检查 可疑代码检查,if判断中含有可疑的=号,自由变量返回局部变量等共计15类检查 运算错误,判断无符号数小于0,对bool类型进行+...
  • 支持空指针,越界,逻辑错误,内存泄漏,可疑代码等大类,极其对应细化规则扫描,轻松帮您发现潜在的质量风险。 3.静态集成 无需编译,直接静态扫描,集成在IDE中,轻松点击启动扫描,片刻即可查看结果。 4.高效准确 ...
  • Cartographer 代码逻辑

    千次阅读 2018-04-19 10:55:33
    开源代码逻辑 Google开源的代码包含两个部分:cartographer[2]和cartographer_ros[3]。cartographer主要负责处理来自雷达、IMU和里程计的数据并基于这些数据进行地图的构建,是cartographer理论的底层实现。...
  • Android漏洞扫描工具Code Arbiter

    千次阅读 2017-08-17 19:04:00
    目前Android应用代码漏洞扫描工具种类繁多,效果良莠不齐,这些工具有一个共同的特点,都是在应用打包完成后对应用进行解包扫描。这种扫描有非常明显的缺点,扫描周期较长,不能向开发者实时反馈代码中存在的安全...
  • 本文参考Spring框架中的AnnotationSessionFactoryBean源码,改造了一个包扫描器。能够在指定的package下扫描带有特定注解的Bean。用于增加Spring配置的灵活性。
  • 库厄斯 库厄斯:库厄斯是天王星之一,是天王星和盖亚的儿子。 他的名字意味着质疑。 如果我们需要导入...具体代码逻辑上在项目组查看。 生成的扫描文件,输出在结果文件夹下,分别有对应的日志文件和输出的repor
  • 扫描渗透等工具介绍

    万次阅读 2016-05-26 13:36:54
    #1 Nessus:最好的UNIX漏洞扫描工具  Nessus 是最好的免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上。它不止永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance--终端用户授权...
  • 静态代码扫描

    千次阅读 2017-04-28 13:53:03
    静态代码分析(Static program analysis):在不运行程序的条件下,进行程序分析。 编译流程差不多分为这5个阶段: ...静态代码扫描通常分为两种: 模式匹配:匹配代码编译过程中的token流、抽象语法树
  • web安全扫描工具-Skipfish

    千次阅读 2019-05-22 12:09:19
    1. Skipfish 简介 简介: Skipfish是一款主动的Web应用程序安全侦察工具。它通过执行递归爬取和基于字典的探测来为目标站点准备交互式站点地图。... 高速:纯C代码,高度优化的HTTP处理,最小的CPU占用空...
  • 静态代码扫描的原理

    千次阅读 2020-01-15 11:29:27
    统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的 以上三点证明了,静态代码扫描在整个安全开发的流程中起着十分关键的作用,且实施这件事情的时间...
  • 代码静态检查工具汇总

    千次阅读 2014-03-31 20:43:01
    静态代码扫描,借用一段网上的原文解释一下(这里叫静态检查):“静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。代码检查代码检查...
  • Coverity代码静态检测工具介绍

    千次阅读 2019-08-09 09:51:20
    Coverity代码静态检测工具介绍 ...
  • 同样地,黑客也能够通过错误信息,推断出你的后台代码逻辑。那么,黑客究竟是怎么做的呢?接下来,我们就一起看一下这个过程。 为什么错误信息会泄露代码逻辑? 当黑客在登录某个页面时,在用户名位置输入一个单引号...
  • findBugs 代码静态扫描 学习笔记

    千次阅读 2016-04-26 16:07:52
    为了有针对性的使用这个工具,减少bug的误报,提高使用效率,我们选择了10个左右的bug模式,下面就是对这10个模式的解释。 这些bug可能会引起程序的性能或逻辑问题. 需要说明的是,findbugs能检测的bug pattern远...
  • 应用功能程度自身源代码 运行时的应用程序 运行时的应用程序以及环境 扫描侧重点 应用程序自身的漏洞 应用程序自身的漏洞 应用程序运行的环境的漏洞 是否需要运行时的环境 不需要 需要....
  • 分享一个wiki敏感信息扫描工具

    千次阅读 2020-08-08 17:06:23
    日常的安全运营中总是发现很多开发的同学将代码片段和一些技术文档在企业内部搭建的wiki中进行记录,其中经常会包含一些密码、数据库连接字符串、认证token之类的敏感信息。而这些文章往往是public的权限任何wiki...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,438
精华内容 32,175
关键字:

代码逻辑扫描工具