kotlin - 二阶 SOQL SOSL 注入 SFDC
问题描述
我在Checkmarx中遇到错误。
abortJob
第 209 行的方法从元素XXX/classes/Monitoring.cls
获取用户输入。 然后,该元素的值在没有经过适当清理或验证的情况下流经代码,并最终在第 209 行的方法中用于数据库查询。 这可能会启用 SOQL 注入攻击。select
jobAbortRem
XXX/classes/Monitoring.cls
Source Destination
File XXXX/classes/Monitoring.cls XXXX/classes/Monitoring.cls
Line 212 217
Object select select
public static void abortJob() //line no. 209
{
list<CronTrigger> detailId=[select id FROM CronTrigger
where (CronJobDetail.Name='myJobName') AND NextFireTime = null]; //line 212
if (detailId.size() > 0)
{
Id jobId = [SELECT Id from CronTrigger WHERE id = :detailId].get(0).Id; //and line 217
System.abortJob(jobId);
Monitoring.scheduleJob();
}
}
帮助我解决这个问题,我怎样才能通过Checkmarx审查。
谢谢
解决方案
使用 escapeSingleQuotes 方法清理 detailId 的每个元素(我建议重命名此)集合
public static void abortJob() {
list<CronTrigger> detailId=[select id FROM CronTrigger where (CronJobDetail.Name='myJobName' ) AND NextFireTime =null];
Id jobId ;
for (CronTrigger currentCron : detailId) {
jobId = String.escapeSingleQuotes(currentCron.Id);
}
if (jobId !=null) {
System.abortJob(jobId);
Monitoring.scheduleJob();
}
}
这是有用的Salesforce 安全编码参考
您可能还想尝试这种类型的循环来处理查询结果的每个项目 https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_loops_for_SOQL.htm
推荐阅读
- laravel - laravel 嵌套 hasmany 与最后一个孩子的 where 子句
- javascript - 在打字稿中使用一段 javascript
- java - Xades4j 对带有附件的 xml 文件进行签名
- angular - Angular 2+ Http post request responseType blob不显示服务器返回的json错误
- c - FreeRtos osDelay 正好是三倍
- r - 如何根据一天中的时间从数据框中导出 2 个数据框?
- python - 从单独的 python 线程更新 newt (snack.py) 接口
- r - /usr/lib/rstudio-server/bin/rserver:/usr/pgsql-12/lib/libpq.so.5:没有可用的版本信息(/usr/lib/rstudio-server/bin/rserver 需要)
- disassembly - 反汇编是否需要分析指针关系(别名)?
- javascript - React 检测 iframe src 的变化