You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Checkmarx检测到的Apex代码参数篡改安全问题?

解决Checkmarx检测的Apex参数篡改风险问题

Checkmarx报错的核心原因是直接从inputMap获取的ClientId未经过有效性验证就用于SOQL查询——即便用了绑定变量,工具仍会担心恶意构造的参数绕过查询逻辑。以下是具体修复方案:

修复步骤

  • 空值校验:先判断输入是否为空,避免空指针或无效查询
  • Id格式校验:确保输入符合Salesforce Id的格式规范
  • 对象类型校验:验证该Id确实属于Account对象,防止跨对象的参数篡改

修改后的代码

String clientIdStr = String.valueOf(inputMap.get('ClientId'));
Id clientId;

// 空值检查
if (String.isBlank(clientIdStr)) {
    throw new IllegalArgumentException('ClientId不能为空');
}

// 验证Id格式合法性
if (!Id.isValid(clientIdStr)) {
    throw new IllegalArgumentException('ClientId格式无效');
}

clientId = Id.valueOf(clientIdStr);

// 验证Id对应的对象是Account
if (clientId.getSObjectType() != Schema.SObjectType.Account) {
    throw new IllegalArgumentException('传入的Id不属于Account记录');
}

// 执行合法查询(Id唯一,LIMIT 1即可)
Account a = [SELECT Id, Client__c, ParentId, Parent.RecordType.DeveloperName, CI_ClientID__c 
             FROM Account 
             WHERE Id = :clientId 
             LIMIT 1];

说明

通过上述三层验证,确保传入的ClientId是合法有效的Account记录Id,彻底消除参数篡改的风险。Checkmarx会识别到这些验证逻辑,不再触发报错。另外原代码中LIMIT 1000无必要,因为Salesforce的Id是唯一的,LIMIT 1足够保证查询到唯一匹配的记录。

内容的提问来源于stack exchange,提问作者SSV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:26:35