新增: 信任所有目录扩展至敏感目录放行

开关语义升级为完全放行,含 .ssh/.aws 等黑名单目录(产品拍板体验优先,用户知情选择)
validate_path 与 is_authorized 双拦截点经进程级标志同源放行,audit 层每轮工具执行前刷新
设置页开启时二次确认,正文明示敏感凭据可进对话上下文风险自担;对话区常驻放行横幅既有
测试以串行闸防并行互踩进程级标志
This commit is contained in:
lxy
2026-10-01 02:40:49 +08:00
parent 63779e8d69
commit 3e239a108f
8 changed files with 204 additions and 25 deletions
@@ -206,11 +206,32 @@ mod tests {
#[test]
fn test_validate_path_rejects_sensitive_system_dirs() {
// 依赖全局黑名单放行标志为关,持串行闸防与改写标志的并行测试互踩
let _guard = crate::commands::ai::audit::BLACKLIST_BYPASS_TEST_LOCK
.lock()
.unwrap_or_else(|e| e.into_inner());
// .ssh / .aws / .gnupg 等敏感目录被拒(走 is_in_system_blacklist)
assert!(validate_path("/root/.ssh/id_rsa").is_err());
assert!(validate_path("C:\\Users\\x\\.aws\\credentials").is_err());
}
#[test]
fn test_validate_path_bypass_allows_sensitive_dirs() {
// 总开关开启:黑名单放行(validate_path 层),.. 遍历检查保留(路径合法性校验,非权限边界)。
// 先取结果再复位再断言,防 panic 泄漏标志污染其他测试。
let _guard = crate::commands::ai::audit::BLACKLIST_BYPASS_TEST_LOCK
.lock()
.unwrap_or_else(|e| e.into_inner());
crate::commands::ai::audit::set_blacklist_bypass(true);
let ssh_ok = validate_path("/root/.ssh/id_rsa").is_ok();
let aws_ok = validate_path("C:\\Users\\x\\.aws\\credentials").is_ok();
let traversal_still_denied = validate_path("/root/.ssh/../.gnupg/x").is_err();
crate::commands::ai::audit::set_blacklist_bypass(false);
assert!(ssh_ok, "bypass 开时 .ssh 路径应通过 validate_path");
assert!(aws_ok, "bypass 开时 .aws 路径应通过 validate_path");
assert!(traversal_still_denied, "bypass 开时 .. 遍历检查应保留");
}
// ── handler 参数边界 ──
#[tokio::test]