如何解决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
相关产品推荐
相关产品推荐

