Fortify代码扫描问题及修复

1、Portability Flaw: Locale Dependent Comparison (Code Quality, Control Flow)

移植性缺陷:地区依赖比较(代码质量,控制流)

if (tag.toUpperCase().equals("SCRIPT")){
  return null;
}
if (tag.toUpperCase(Locale.ENGLISH).equals("SCRIPT")){
  return null;
}
if (tag.equalsIgnoreCase("SCRIPT")){
	return null;
}

2、Access Specifier Manipulation (Input Validation and Representation, Semantic)

访问说明符操作(输入验证和表示,语义)

field.setAccessible(true);
修改为使用spring提供的类
import org.springframework.util.ReflectionUtils;
ReflectionUtils.makeAccessible(field);

3、Poor Style: Value Never Read (Code Quality, Structural)

糟糕的风格:值从未使用(代码质量,结构)

4、Build Misconfiguration: External Maven Dependency Repository (Environment, Configuration)

构建错误配置:外部Maven依赖库(环境,配置)
这一 Maven 编译脚本依赖于外部数据源,这会导致攻击者能够将恶意代码插入最终产品中,或者控制编译计算机。

5、Code Correctness: Byte Array to String Conversion (Code Quality, Semantic)

代码正确性:字节数组到字符串的转换(代码质量,语义)

public class ByteSerializerUtils extends JsonSerializer<byte[]>{
	@Override
	public void serialize(byte[] bytes, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
		jsonGenerator.writeString(new String(bytes));
	}
}
修改为
new String(bytes,"UTF-8")

6、Code Correctness: Erroneous String Compare (Code Quality, Structural)

代码正确性:错误字符串的比较(代码质量,结构)

7、Dead Code: Expression is Always false (Code Quality, Structural)

死代码:表达式总是假的(代码质量,结构)

8、Dead Code: Unused Method (Code Quality, Structural)

死代码:未使用的方法(代码质量,结构)

9、Denial of Service: Parse Double (Input Validation and Representation, Data Flow)

拒绝服务:解析Double(输入验证和表示,数据流)

10、HTML5: Overly Permissive CORS Policy (Encapsulation, Semantic)

HTML5: 过于宽松的CORS策略(封装、语义)
程序会定义过于宽松的跨源资源共享 (CORS) 策略。

11、J2EE Bad Practices: Leftover Debug Code (Encapsulation, Structural)

J2EE Bad Practices:剩余的调试代码(封装,结构)

12、Missing Check against Null (API Abuse, Control Flow)

缺少对Null的检查(API滥用,控制流)

13、Password Management: Password in Comment (Security Features, Structural)

密码管理:密码在评论中(安全功能,结构)
以明文形式在系统或系统代码中存储密码或密码详细信息可能会以无法轻松修复的方式危及系统安全。

14、Poor Error Handling: Overly Broad Catch (Errors, Structural)

糟糕的错误处理:过于宽泛的捕获(错误,结构性)
不要捕获广泛的异常类,例如exception、Throwable、Error或RuntimeException,除非是在程序或线程的最高层。

15、Access Control: Database (Security Features, Data Flow)

访问控制:数据库(安全特性,数据流)
Rather than relying on the presentation layer to restrict values submitted by the user, access control should be handled by the application and database layers. Under no circumstances should a user be allowed to retrieve or modify a row in the database without the appropriate permissions. Every query that accesses the database should enforce this policy, which can often be accomplished by simply including the current authenticated username as part of the query.

访问控制应该由应用程序层和数据库层处理,而不是依赖表示层来限制用户提交的值。在任何情况下,都不允许用户在没有适当权限的情况下检索或修改数据库中的行。每个访问数据库的查询都应该执行此策略,通常只需将当前经过身份验证的用户名作为查询的一部分即可完成此策略。

16、Header Manipulation (Input Validation and Representation, Data Flow)

报头操作(输入验证和表示,数据流)

17、Null Dereference (Code Quality, Control Flow)

空引用(代码质量,控制流)

18、Unreleased Resource: Streams (Code Quality, Control Flow)

未发布的资源:流(代码质量,控制流)

19、Cross-Site Scripting: Persistent (Input Validation and Representation, Data Flow)

风险类型原因
Code Correctness: Erroneous String Compare字符串的对比使用错误方法
Cross-Site ScriptingWeb浏览器发送非法数据,导致浏览器执行恶意代码
Dead Code: Expression is Always true表达式的判断总是true
Dead Code: Unused Method没有使用的方法
HTTP Response Splitting含有未验证的数据
J2EE Bad Practices: Leftover Debug Code在部署的Web应用程序中建立了一些想象不到的入口点
Missing Check against Null有可能返回了null
Poor Error Handling: Empty Catch Block有些异常备忽略,可能会导致程序无法发现意外状况
Poor Error Handling: Overly Broad CatchCatch块可以处理的异常种类比较多,往往会过多的考虑不应该在此位置处理各种问题或故障而困扰
Poor Error Handling: Overly Broad ThrowsThrows了一个过于笼统的异常,从而使调用者很难处理和修复发生的错误
Poor Error Handling: Return inside Finally可能会导致异常丢失
Poor Logging Practice: Use of a System output stream使用system.out或system.err不是专门的日志记录工具,会导致难以监控程序的运行状况
Poor Style: Value Never Read没有使用赋给变量的值
System Information Leak: HTML Comment in JSP注释所包含的任何信息都有可能帮助攻击者了解系统并制定相应的攻击方案
Unchecked Return Value忽略了某些方法的返回值
J2EE Bad Practices: Threads禁止在某些环境下使用Web应用程序的线程管理
JavaScript Hijacking: Ad Hoc Ajax使用Javascript符号传递敏感数据会存在漏洞
Denial of Service读取文件可能会使攻击者造成程序崩溃
System Information LeakprintstackTrace()来提示系统数据有助于攻击者制定攻击计划
Insecure Randomness产生的随机数不能抵挡加密攻击
Null Dereference引用了空指针
Unreleased Resource: Streams无法成功释放FileInputStream()函数分配的系统资源
Redundant Null Check引用了空指针
Dead Code: Unused Field没有使用的字段
Axis 2 Misconfiguration: Debug Information借助SOAP Monitor模块,攻击者可截取SOAP信息流
Poor Error Handling: Program Catches nullpointerexception可捕获NullPointException,通常来说不是一个好方法
Poor Style: Confusing Naming重复命名
Dead Code: Expression is Always false表达式的判断总是false
J2EE Misconfiguration: Incomplete Error handing配置默认的错误页面,来处理那些未被捕获的异常
Path Manipulation攻击者可控制File路径参数,借此访问或修改其他受保护的文件
Poor Logging Practice: Logger Not Declared static final应该将日志记录器声明为固定且最终的记录器
Poor Style: Redundant Initialization没有使用赋给变量的值
Code Correctness: null Argument to equals()表达式obj.equals(null)将总是false
Privacy Violation:Heap Inspection
J2EE Bad Practices:Leftover Debug Code
Poor Error Handling:Overly Broad Throws
Password Management Password in Configuration File
Build Misconfiguration:External Maven Dependency Repository
  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Fortify SCA(应用安全代码审查)是一种静态代码分析工具,用于检测软件中的安全漏洞和潜在的代码缺陷。以下是对Fortify SCA常见问题的回答: 1. 为什么要使用Fortify SCA? Fortify SCA能够在开发过程中自动扫描和标识软件中的安全漏洞,帮助开发团队及时修复风险,保护软件免受攻击。它提供了一种可靠的方式来提高代码质量和安全性。 2. Fortify SCA能够检测哪些安全漏洞? Fortify SCA可以检测各种安全漏洞,包括但不限于SQL注入、跨站脚本攻击(XSS)、代码注入、安全配置错误、缓冲区溢出等。它基于大量经验和规则库,能够准确地识别潜在的漏洞和弱点。 3. 如何使用Fortify SCA? 开发人员可以通过将Fortify SCA集成到他们的集成开发环境中,或者通过命令行方式执行扫描来使用该工具。Fortify SCA将会扫描代码文件,查找潜在的安全问题,并生成详细的报告。 4. 如何解释Fortify SCA生成的扫描报告? Fortify SCA生成的扫描报告将列出所有发现的安全漏洞和问题,以及对应的代码位置和风险级别。开发人员应仔细阅读并理解报告中的问题描述和建议,以便及时修复漏洞和加强代码的安全性。 5. 如何解决Fortify SCA报告中的问题? 开发团队应根据Fortify SCA报告中的建议,对代码中的漏洞和问题进行修复修复包括但不限于改正代码逻辑、过滤输入、验证用户输入、遵循安全最佳实践等。 总之,Fortify SCA是一款强大的静态代码分析工具,可以帮助开发人员发现和修复安全漏洞和潜在的代码缺陷。通过集成Fortify SCA到开发流程中,可以提高代码的安全性和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值