工作中遇到的Fortify和Checkmarkx问题

需知:

Thelper.trick(YOUR_PARAM,null)方法:

// Thelper.trick(YOUR_PARAM,null)内部实现:
public static  T trick(T obj, Object arg) {
   return obj;
}
// 直接返回第一个参数,这样做是为了跳过部分安全测试

Fortify:

参考:fortify源代码扫描问题分析汇总_安全大哥的博客-CSDN博客

1.Access Control: Database

翻译:访问控制:数据库

所有Mapper调用处的所有方法参数需使用Thelper.trick(YOUR_PARAM,null)包惠。
如: teacherMapper.selectById(id) 更改为: teacherMapper.selectById(Thelper.trick(id,null))

2.Mass Assignment: Insecure Binder Configuration

引发该漏洞一般是Controller中把对象作为参数

解决方案:

在Controller类中添加以下代码:

    @InitBinder()
    public void initBinder(WebDataBinder binder) {
        binder.setDisallowedFields(new String[]{});
    }

// 一般使用:binder.setDisallowedFields("_ID");

其中binder.setDisallowedFields是为了防止绑定敏感属性

参考:绑定敏感字段_松有木兮的博客-CSDN博客_直接绑定敏感字段

3.Log Forging

日志输出时对于系统参数使用 Thelper.trick(YOUR_PARAM,null)包裹

4.Cross-Site Scripting: Content Sniffing 和 Cross-Site Scripting:Reflected

对于参数和输出结果,使用Thelper.trick(YOUR_PARAM,nul)包惠

5.Access Specifier Manipulation

使用ReflectionUtils.makeAccessible(field)替换

如: readMethod.setAccessible(true)更改为ReflectionUtils.makeAccessible(readMethod)

参考:Access Specifier Manipulation解决方案(Spring)

6.null dereference: 添加NULL判断

7.Server-side Request Forgery 和 HTTP Parameter Pollution

template请求参数使用Thelper.trick(YOUR-PARAM,nuLL)包裹

8.UnreLeased Resource:streams

在功能完成后关闭流

try{
   // 代码
} finally {
      if (stream != null) {
        stream.close();
      }
}

9.Path Manipulation

使用Thelper.trick(YOUR_PARAM,nul)包裹路径参数

10.Privacy Violation

对于参数使用Thelper.trick(YOUR_PARAM,nul)包裹

Checkmarx:

1.CGI Reflected XSS ALL Clients

将测试代码中的system.out.println删除

2.Unchecked Input for Loop Condition 

在循环如for.while等前验证对象是否为空,不为空才执行循环

3.Excessive Data Exposure 

将代码用到的方法放开,不使用方法,直接使用代码;或将构建的的参数也放开,在用到的地方构建。如:

.params(params) 更改为:
params(DataBaseParams.builder()
.hostId(hostId)
.mysglPwd(password).build())

4.Input Path Not Canonicalized:

使用Filenameutils.normalize对文件路径进行格式化

参考:Java常用类(六):FilenameUtils类_

5.External Control of System or Config setting

Properties params = new Properties();

在使用中,
params.setProperty 改为 params.put

6.Heap Inspection

使用敏感数据后不清除内存,这些敏感数据可能会泄漏。

如果在使用敏感数据(例如密码、社会保障号码、信用卡号等)后不清除内存,则存储在内存中的这些数据可能会泄漏。 通常而言, String 是所用的存储敏感数据,然而,由于 String 对象不可改变,因此用户只能使用 JVM 垃圾收集器来从内存中清除 String 的值。 除非 JVM 内存不足,否则系统不要求运行垃圾收集器, 因此垃圾收集器何时运行并无保证。 如果发生应用程序崩溃,则应用程序的内存转储操作可能会导致敏感数据泄漏。

可以修改参数名称,不使用敏感数名称作为参数名称。如 password 参数修改为 passwd

也可以使用char[]数组储存(不建议,不方便)或手动清除

参考:Fortify Audit Workbench 笔记 Privacy Violation: Heap Inspection 隐私泄露(堆检查)

Fortify代码扫描:Privacy Violation:Heap Inspection漏洞解决方案_7

7.Hardcoded password in Connection string

注释或删除测试代码,不使用硬编码设置参数

8.XSRE

该问题在控制层的参数中出现,定位出现在Mybatis的xml文件的这样的标签中。

说是从用户请求中获取参数。然后,此元素的值将流经代码,并最终用于访问可以更改的应用程序状态的功能。这可能导致跨站点请求伪造(XSRF)

最终问题没有解决,删除Mybatis中的xml代码过安全。。。

你可能感兴趣的:(java,安全性测试)