|
|
@@ -2,6 +2,8 @@ package main
|
|
|
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
+ "fmt"
|
|
|
+ "strings"
|
|
|
"time"
|
|
|
|
|
|
"hnyfkj.com.cn/rtu/linux/utils/jsonrpc2"
|
|
|
@@ -53,6 +55,15 @@ func (c *MQTTCoupler) ping() (*jsonrpc2.Response, error) {
|
|
|
// 执行命令
|
|
|
func (c *MQTTCoupler) exec(
|
|
|
cmd string) (*shell.ExecuteResult, error) {
|
|
|
+ if strings.ContainsAny(cmd, "&") {
|
|
|
+ return nil, fmt.Errorf("禁止启动后台任务")
|
|
|
+ }
|
|
|
+
|
|
|
+ if strings.ContainsAny(cmd, "|>;") || strings.Contains(cmd, "\n") {
|
|
|
+ safeCmd := strings.ReplaceAll(cmd, "'", "'\\''")
|
|
|
+ cmd = fmt.Sprintf("sh -c '%s'", safeCmd) // 包装成 shell 命令, 支持管道等高级功能
|
|
|
+ }
|
|
|
+
|
|
|
params := struct {
|
|
|
ClientID string `json:"client_id"`
|
|
|
shell.ExecuteParams
|