Java静态扫描工具

   今天Java静态扫描工具1.2.0终于发布了。
   Findbugs是一款JAVA代码静态分析器,能够在程序不运行的情况下扫描class文件。
扫描的过程中对被扫描的文件进行智能的分析,判断是否存在某些潜在的bug.如果
扫描发现跟预先定义的bug规则一致,那么就会报告bug.这些bug规则,来源于JAVA
开发经验的最优总结,包括网上流行的经验、《effective java》、
《重构,改善既有代码的结构》以及长期项目总结的经验等等。这些规则都是经过
实践积累的经验。
我们使用Findbugs静态代码分析器对10个JAVA项目的300多万行左右的代码进行了分析
了。总结出了最常出现的bug,同时对这些bug的原理进行了详细说明,深度剖析,陈述利弊,
并举相应的例子。这些bug主要从多线程、性能、不好的实践、正确性等方面进行了归类。
同时我们也针对我们项目自己的特点,开发了一定数量的我们自己的新规则,新规则采用
了参数的原则,更加灵活。在功能上更加完善了我们Bug检测体系。随着项目经验的积累,
还会有更多的规则加入到系统中。
资深开发人员的很重要的一个标志是精细化编程。要达到精细化,不单要编对程序,
而且要编写最优的程序。通过掌握我们这些bug的原理,可以从一定程度上达到最优编程。
该工具可以作为eclipse的插件使用,在日常编程中,使用我们的代码静态分析工具,能
够时刻提醒你哪些地方编写的还不是最优,提醒你怎样才能达到最优。编程,不再是枯燥
的,没有提高的事情;而是,充满了乐趣,每天都在工作中进步的过程。
  该版本对100多个bug的原理进行了详细的说明。深入分析每种bug,先讲解原理,然后举
例说明。这个版本耗时两个月,查阅了大量网络资料,以及业界流行的文献。在这一个月里
面,主要是每天晚上以及周末进行分析,因此很少时间陪家人。为此对我的家人表示深深的感
谢和深爱。
  大家有兴趣交流java静态分析技术的可以跟我交流。
如图:
1、查找bug:
[img]http://dl.iteye.com/upload/attachment/257671/096a1ed8-13b8-33d6-9535-a3b179738a49.jpg[/img]

2、Bug视图
[img]http://dl.iteye.com/upload/attachment/257667/8c132e0c-8694-3487-abc6-c4c575abe471.jpg[/img]

3、Bug属性视图
[img]http://dl.iteye.com/upload/attachment/257669/288fac23-db18-39a8-ae2b-7a6007730222.jpg[/img]
### Java CodeQL 静态代码分析工具使用指南 #### 工具概述 CodeQL 是一种强大的语义代码查询语言和自动化分析引擎,能够帮助开发者识别潜在的安全漏洞和其他质量问题。对于托管在 GitHub 上的开源项目而言,CodeQL 提供了免费的服务来执行静态应用安全测试(SAST)[^2]。 #### 准备工作环境 为了开始使用 CodeQL 进行 Java 项目的静态分析,首先需要准备合适的工作环境: - **安装 CodeQL CLI**:通过官方渠道下载并安装最新版本的 CodeQL 命令行接口(Command Line Interface),这是运行所有后续命令的基础[^3]。 - **配置开发环境**:建议采用 Visual Studio Code (VS Code) 结合 `vscode-codeql-starter` 插件作为主要IDE支持,这可以极大提高工作效率[^4]。 #### 创建数据库 针对目标 Java 应用程序建立专用的 CodeQL 数据库是启动任何具体分析前的关键步骤之一。此操作可以通过如下 shell 脚本完成: ```bash codeql database create /path/to/your/database \ --source-root=/path/to/java/project \ -j 0 -l java \ --command "mvn clean install -DskipTests" ``` 这段脚本指定了源码路径以及构建指令(`mvn`),确保编译过程中不会执行单元测试以节省时间。 #### 编写与执行查询 一旦有了可用的数据集之后就可以编写自定义 Query 来查找特定类型的缺陷或风险点了。下面给出一个简单的例子用来检测 SQL 注入的可能性: ```sql import java from MethodAccess ma, StringLiteral sl where ma.getExpr() instanceof MethodInvocation and ma.getMethod().getName().regexpMatch("(?i)^executeUpdate$") and exists(sl | sl.getParent() = ma.getArgument(0)) select ma, "Potential SQL injection vulnerability." ``` 上述查询逻辑是从所有的方法调用中筛选出那些可能涉及不安全SQL执行的地方,并标记它们以便进一步审查[^1]。 #### 查看结果报告 最后,在完成了查询之后,应该查看产生的结果文件(.bqrs,.csv等格式),从中获取到具体的警告信息及其上下文位置,从而指导修复措施的选择。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值