瀏覽代碼

```
refactor(security): 优化命令注入检测正则表达式

- 优化系统命令函数调用的正则匹配模式,增加参数边界检查
- 改进管道符检测逻辑,仅匹配后跟危险命令的情况
- 更新分号检测规则,避免误匹配HTML实体等正常内容
- 精确化危险命令的正则表达式,提高匹配准确性
- 调整反引号命令检测,减少对代码块中反引号的误判
```

shichen 5 月之前
父節點
當前提交
06f9585f3a
共有 1 個文件被更改,包括 11 次插入9 次删除
  1. 11 9
      app/middleware/SecurityMiddleware.php

+ 11 - 9
app/middleware/SecurityMiddleware.php

@@ -208,18 +208,20 @@ class SecurityMiddleware
208 208
     protected function detectCommandInjection(string $input): bool
209 209
     {
210 210
         $patterns = [
211
-            // 系统命令
212
-            '/(?:system|exec|shell_exec|passthru|proc_open|popen|pcntl_exec)\s*\(/i',
211
+            // 系统命令函数调用(更精确的匹配)
212
+            '/(?:system|exec|shell_exec|passthru|proc_open|popen|pcntl_exec)\s*\(\s*[\'\"\$\w]/i',
213 213
 
214
-            // 管道符
215
-            '/\|\s*\w+/',
216
-            '/;\s*\w+/',
214
+            // 管道符后跟命令(避免匹配单纯的|字符)
215
+            '/\|\s*(?:rm\s|cat\s|ls\s|wget\s|curl\s|nc\s|sh\s|bash\s)/i',
216
+            
217
+            // 分号后跟命令(避免匹配HTML实体如 )
218
+            '/;\s*(?:rm\s|cat\s|ls\s|wget\s|curl\s|nc\s|sh\s|bash\s|\$\w+)/i',
217 219
 
218
-            // 危险命令
219
-            '/\b(?:rm\s+-|cat\s+\/|wget\s+|curl\s+|nc\s+)\b/i',
220
+            // 危险命令(更精确的匹配)
221
+            '/\b(?:rm\s+-(?:rf?|i)\b|cat\s+\/\w|wget\s+http|curl\s+http|nc\s+-[lv])\b/i',
220 222
 
221
-            // 反引号
222
-            '/`.*?`/',
223
+            // 反引号包裹命令(避免匹配代码块中的反引号)
224
+            '/`\s*(?:rm\s|cat\s|ls\s|wget\s|curl\s|nc\s|sh\s|bash\s)/i',
223 225
         ];
224 226
 
225 227
         foreach ($patterns as $pattern) {