From 619626ae7ef85afc60c720fb309efb08b58b0cb7 Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期一, 20 一月 2025 09:43:26 +0800
Subject: [PATCH] sqlInject2

---
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java |   52 +++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 37 insertions(+), 15 deletions(-)

diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java
index e8f862b..2ef1f30 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java
@@ -2,6 +2,7 @@
 
 import com.iailab.framework.tenant.core.context.DataContextHolder;
 import com.iailab.module.data.common.utils.DateUtils;
+import com.iailab.module.data.common.xss.SQLFilter;
 import com.iailab.module.data.plan.data.entity.PlanDataSetEntity;
 import com.iailab.module.data.plan.data.service.PlanDataSetService;
 import com.iailab.module.data.plan.item.entity.PlanItemEntity;
@@ -34,8 +35,6 @@
     public List<PlanItemValueVO> queryValue(String itemNo, Date startTime, Date endTime) {
         List<PlanItemValueVO> result = new ArrayList<>();
         PlanItemEntity itemEntity = planItemService.getInfoByNo(itemNo);
-        Map<String, Object> params = new HashMap<String, Object>();
-
         PlanDataSetEntity dataSet = planDataSetService.get(itemEntity.getDataSet());
         if (dataSet == null) {
             log.warn("数据集不能为空");
@@ -45,24 +44,15 @@
             log.warn("数据源不能为空");
             return null;
         }
+        Map<String, Object> params = getSqlParams(dataSet, startTime, endTime);
+        SQLFilter.sqlInject2(dataSet.getQuerySql());
         DataContextHolder.setDataSourceId(Long.valueOf(dataSet.getDataSource()));
-
-        params.put("selectSql", " plan_t.start_time, plan_t.end_time");
-        params.put("viewSql", dataSet.getQuerySql());
-        StringBuilder whereSql = new StringBuilder();
-        String startStr = DateUtils.format(startTime, DateUtils.DATE_NUMBER_PATTERN);
-        String endStr = DateUtils.format(endTime, DateUtils.DATE_NUMBER_PATTERN);
-        whereSql.append(" plan_t.start_time <= " )
-                .append(endStr)
-                .append(" and plan_t.end_time >= ")
-                .append(startStr);
-        params.put("whereSql", whereSql.toString());
         List<PlanItemDataVO> dataList = planItemService.getSourceValue(params);
 
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(startTime);
-        int dataLength = (int)((endTime.getTime() - startTime.getTime()) / (1000 * 60)) + 1;
-        for (int i = 0; i < dataLength; i ++) {
+        int dataLength = (int) ((endTime.getTime() - startTime.getTime()) / (1000 * 60)) + 1;
+        for (int i = 0; i < dataLength; i++) {
             PlanItemValueVO itemValue = new PlanItemValueVO();
             Date dataTime = calendar.getTime();
             itemValue.setDataTime(dataTime);
@@ -82,4 +72,36 @@
         }
         return result;
     }
+
+    public List<PlanItemDataVO> getSourceValue(String itemNo, Date startTime, Date endTime) {
+        PlanItemEntity itemEntity = planItemService.getInfoByNo(itemNo);
+        PlanDataSetEntity dataSet = planDataSetService.get(itemEntity.getDataSet());
+        if (dataSet == null) {
+            log.warn("数据集不能为空");
+            return null;
+        }
+        if (StringUtils.isEmpty(dataSet.getDataSource())) {
+            log.warn("数据源不能为空");
+            return null;
+        }
+        Map<String, Object> params = getSqlParams(dataSet, startTime, endTime);
+        return planItemService.getSourceValue(params);
+    }
+
+    private Map<String, Object> getSqlParams(PlanDataSetEntity dataSet, Date startTime, Date endTime) {
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("selectSql", " plan_t.start_time, plan_t.end_time");
+        params.put("viewSql", dataSet.getQuerySql());
+        StringBuilder whereSql = new StringBuilder();
+        String startStr = DateUtils.format(startTime, DateUtils.DATE_NUMBER_PATTERN);
+        String endStr = DateUtils.format(endTime, DateUtils.DATE_NUMBER_PATTERN);
+        whereSql.append(" plan_t.start_time <= '")
+                .append(endStr)
+                .append("'")
+                .append(" and plan_t.end_time >= '")
+                .append(startStr)
+                .append("'");
+        params.put("whereSql", whereSql.toString());
+        return params;
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3