From f6eca216cf514823dea5c05b37ad2c8a01fcb773 Mon Sep 17 00:00:00 2001
From: gigibox <gigibox@163.com>
Date: 星期二, 20 六月 2023 16:22:23 +0800
Subject: [PATCH] 修改查询接口

---
 kingdee/query.go |   37 +++++++++++++++++++++++++++++--------
 1 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/kingdee/query.go b/kingdee/query.go
index 3926f88..65fd8d4 100644
--- a/kingdee/query.go
+++ b/kingdee/query.go
@@ -2,6 +2,7 @@
 
 import (
 	"encoding/json"
+	"strings"
 
 	"kingdee-dbapi/config"
 	"kingdee-dbapi/logger"
@@ -15,28 +16,34 @@
 
 	logger.Debug("鎺ユ敹鍒版煡璇㈣姹�,%s", sql)
 
+	if !sqlCheck(sql) {
+		logger.Warn("璇嗗埆鍒板嵄闄╃殑sql璇彞, 鎷掔粷鎵ц. %s", sql)
+
+		return nil
+	}
+
 	if db == nil {
 		logger.Debug("鏁版嵁搴撴湭杩炴帴")
 
 		return nil
 	}
 
-	rows, err := db.Raw(`select * from users`).Rows()
+	rows, err := db.Raw(sql).Rows()
 	if err != nil {
 		result = append(result, err.Error())
 		return err
 	}
 
-	var colums []string
+	var cols []string
 	for rows.Next() {
 		//鍏堣幏鍙栨墍鏈夌殑column
-		if colums == nil {
-			colums, _ = rows.Columns()
+		if cols == nil {
+			cols, _ = rows.Columns()
 		}
 
 		//寤虹珛淇╀釜interface鏁扮粍锛宑olumnPointers涓瓨鍦╟olumns鐨勫湴鍧�
-		columns := make([]interface{}, len(colums))
-		columnPointers := make([]interface{}, len(colums))
+		columns := make([]interface{}, len(cols))
+		columnPointers := make([]interface{}, len(cols))
 		for i, _ := range columns {
 			//璧嬪�煎湴鍧�
 			columnPointers[i] = &columns[i]
@@ -45,13 +52,12 @@
 		//鎵弿缁撴灉
 		rows.Scan(columnPointers...)
 		m := make(map[string]interface{})
-		for i, colName := range colums {
+		for i, colName := range cols {
 			val := columnPointers[i].(*interface{})
 			m[colName] = *val
 		}
 
 		result = append(result, m)
-		//result = append(result, row)
 	}
 
 	logger.Debug("鏁版嵁搴撹繑鍥炴暟鎹�%+v", result)
@@ -66,3 +72,18 @@
 
 	return nil
 }
+
+// 绠�鍗曡繃婊や笅sql璇彞,鎷掔粷澧炲垹鏀规搷浣�
+func sqlCheck(sql string) bool {
+	var dangerousWords = []string{"INSERT", "UPDATE", "DELETE", "ALTER", "DROP", "DECLARE", "EXECUTE", "EXEC", "INTO", "TRANCATE"}
+
+	var upperStr = strings.ToUpper(sql)
+
+	for _, word := range dangerousWords {
+		if strings.Contains(upperStr, word) {
+			return false
+		}
+	}
+
+	return true
+}

--
Gitblit v1.8.0