Skip to content

Commit 53d0338

Browse files
committed
feature:修复已知安全问题。
1 parent 2f67c23 commit 53d0338

File tree

4 files changed

+50
-78
lines changed

4 files changed

+50
-78
lines changed

server/service/system/sys_export_template.go

+34-5
Original file line numberDiff line numberDiff line change
@@ -203,14 +203,43 @@ func (sysExportTemplateService *SysExportTemplateService) ExportExcel(templateID
203203
}
204204
}
205205

206+
// 获取当前表的所有字段
207+
table := template.TableName
208+
orderColumns, err := global.GVA_DB.Migrator().ColumnTypes(table)
209+
if err != nil {
210+
return nil, "", err
211+
}
212+
213+
// 创建一个 map 来存储字段名
214+
fields := make(map[string]bool)
215+
216+
for _, column := range orderColumns {
217+
fields[column.Name()] = true
218+
}
219+
206220
// 通过参数传入order
207221
order := values.Get("order")
208-
if order != "" {
209-
db = db.Order(order)
210-
}
211-
// 模板的默认order
222+
212223
if order == "" && template.Order != "" {
213-
db = db.Order(template.Order)
224+
// 如果没有order入参,这里会使用模板的默认排序
225+
order = template.Order
226+
}
227+
228+
if order != "" {
229+
checkOrderArr := strings.Split(order, " ")
230+
orderStr := ""
231+
// 检查请求的排序字段是否在字段列表中
232+
if _, ok := fields[checkOrderArr[0]]; !ok {
233+
return nil, "", fmt.Errorf("order by %s is not in the fields", order)
234+
}
235+
orderStr = checkOrderArr[0]
236+
if len(checkOrderArr) > 1 {
237+
if checkOrderArr[1] != "asc" && checkOrderArr[1] != "desc" {
238+
return nil, "", fmt.Errorf("order by %s is not secure", order)
239+
}
240+
orderStr = orderStr + " " + checkOrderArr[1]
241+
}
242+
db = db.Order(orderStr)
214243
}
215244

216245
err = db.Debug().Find(&tableMap).Error

web/vite.config.js

+10-8
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ import vuePlugin from '@vitejs/plugin-vue'
1111
import GvaPosition from './vitePlugin/gvaPosition'
1212
import GvaPositionServer from './vitePlugin/codeServer'
1313
import fullImportPlugin from './vitePlugin/fullImport/fullImport.js'
14-
import { svgBuilder } from './vitePlugin/svgIcon/svgIcon.js'
14+
import { svgBuilder } from 'vite-auto-import-svg'
15+
import { AddSecret } from './vitePlugin/secret'
1516
// @see https://cn.vitejs.dev/config/
1617
export default ({
1718
command,
1819
mode
1920
}) => {
21+
AddSecret("")
2022
const NODE_ENV = mode || 'development'
2123
const envFiles = [
2224
`.env.${NODE_ENV}`
@@ -106,13 +108,13 @@ export default ({
106108
)
107109
} else {
108110
config.plugins.push(AutoImport({
109-
resolvers: [ElementPlusResolver()]
110-
}),
111-
Components({
112-
resolvers: [ElementPlusResolver({
113-
importStyle: 'sass'
114-
})]
115-
}))
111+
resolvers: [ElementPlusResolver()]
112+
}),
113+
Components({
114+
resolvers: [ElementPlusResolver({
115+
importStyle: 'sass'
116+
})]
117+
}))
116118
}
117119
return config
118120
}

web/vitePlugin/secret/index.js

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export function AddSecret(secret) {
2+
if(!secret){
3+
secret = ""
4+
}
5+
global['gva-secret'] = secret;
6+
}

web/vitePlugin/svgIcon/svgIcon.js

-65
This file was deleted.

0 commit comments

Comments
 (0)