diff --git a/crates/df-nodes/src/script_node.rs b/crates/df-nodes/src/script_node.rs index df05efe..77f9fa4 100644 --- a/crates/df-nodes/src/script_node.rs +++ b/crates/df-nodes/src/script_node.rs @@ -136,8 +136,8 @@ const DEFAULT_BLACKLIST: &[&str] = &["rm", "del", "format", "shutdown", "mkfs", /// /// 返回 `Some(reason)` 表示拒绝(reason 为拒绝原因,用于日志/错误信息);返回 `None` 表示放行。 fn check_command_policy(cmd_name: &str) -> Option<&'static str> { - // 黑名单优先:即便同时在白名单,只要命中黑名单就拒绝(防止白名单失误放过危险命令) - // 未设置 DF_SCRIPT_BLACKLIST 时使用 DEFAULT_BLACKLIST 兜底(防误用零防护) + // 黑名单优先:即便同时在白名单,只要命中黑名单就拒绝 + // 优先从环境变量读,后续可扩展为从 DB KV 注入(前端设置页写入) let env_blacklist = std::env::var("DF_SCRIPT_BLACKLIST").ok(); let blacklist: Vec = match env_blacklist { Some(raw) => raw @@ -148,7 +148,7 @@ fn check_command_policy(cmd_name: &str) -> Option<&'static str> { None => DEFAULT_BLACKLIST.iter().map(|s| s.to_string()).collect(), }; if blacklist.iter().any(|c| c == cmd_name) { - return Some("命令在黑名单中 (DF_SCRIPT_BLACKLIST 或默认)"); + return Some("命令在黑名单中"); } // 白名单:非空时命令名必须在白名单中才放行 @@ -159,7 +159,7 @@ fn check_command_policy(cmd_name: &str) -> Option<&'static str> { .filter(|s| !s.is_empty()) .collect(); if !whitelist.is_empty() && !whitelist.iter().any(|c| c == cmd_name) { - return Some("命令不在白名单中 (DF_SCRIPT_WHITELIST)"); + return Some("命令不在白名单中"); } } diff --git a/src/components/settings/AllowedDirsPanel.vue b/src/components/settings/AllowedDirsPanel.vue index a2a7979..5e506a5 100644 --- a/src/components/settings/AllowedDirsPanel.vue +++ b/src/components/settings/AllowedDirsPanel.vue @@ -176,10 +176,10 @@ async function reload() { // ============================================================ // ScriptNode 命令执行安全 — 白/黑名单 UI // ------------------------------------------------------------ -// 前端仅做 UI + 持久化到 appSettings(df-script-whitelist / df-script-blacklist)。 -// 后端 ScriptNode 当前从环境变量 DF_SCRIPT_WHITELIST / DF_SCRIPT_BLACKLIST 读取 -// (同一逗号分隔语义),前后端打通留后续:前端写入需经 IPC/启动期注入环境变量。 -// 输入语义:逗号分隔命令名(如 `git,npm,cargo`),空串=该项不限制。 +// 前端持久化到 appSettings KV 表(df-script-whitelist / df-script-blacklist)。 +// 后端 ScriptNode 从环境变量 DF_SCRIPT_WHITELIST / DF_SCRIPT_BLACKLIST 读取(同语义逗号分隔)。 +// 前后端打通需跨 crate 接口变更(script_node.execute 接受参数注入),当前标注为已知限制。 +// 临时方案:启动时用脚本注入环境变量(export DF_SCRIPT_WHITELIST=...)。 // ============================================================ const scriptWhitelist = ref(appSettings.get('df-script-whitelist', '')) const scriptBlacklist = ref(appSettings.get('df-script-blacklist', ''))