You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust端校验文件路径是否符合tauri.config的allowList范围

在Tauri后端校验文件路径是否符合allowList权限范围

要在Tauri后端使用OpenOptions操作文件前校验路径是否符合tauri.config.json中allowList.fs.scope的限制,你可以通过FsScope结构体完成校验,具体步骤如下:

核心步骤

  • 解析目标路径:将带变量或相对路径的输入转换为绝对路径,确保FsScope能正确识别。
  • 获取FsScope实例:从App或Window上下文直接获取配置好的权限范围。
  • 执行路径校验:调用FsScope::is_allowed方法检查路径是否在允许范围内,并匹配对应的读写权限。

代码实现示例

假设你有一个后端命令用于写入YAML配置文件,完整实现如下:

use tauri::{api::path::resolve_path, fs::{FsPermission, FsScope}, AppHandle, CommandError};
use std::path::PathBuf;

#[tauri::command]
async fn write_yaml_config(app_handle: AppHandle, target_path: String, yaml_content: String) -> Result<(), CommandError> {
    // 1. 解析路径:替换$HOME等变量,转换为绝对路径
    let resolved_path: PathBuf = resolve_path(
        &app_handle.config(),
        &app_handle.package_info(),
        target_path,
        true, // 允许扩展环境变量
    ).map_err(|e| CommandError::from(e.to_string()))?;

    // 2. 获取配置好的文件权限范围
    let fs_scope: &FsScope = app_handle.fs_scope();

    // 3. 校验路径是否允许写入(读操作则用FsPermission::Read)
    if !fs_scope.is_allowed(&resolved_path, FsPermission::Write) {
        return Err(CommandError::from(format!(
            "路径 {} 不在允许的操作范围内",
            resolved_path.display()
        )));
    }

    // 4. 执行文件写入操作
    std::fs::write(&resolved_path, yaml_content).map_err(|e| CommandError::from(e.to_string()))?;

    Ok(())
}

关键细节说明

  • 路径解析:resolve_path会自动处理tauri.config中定义的路径变量(如$HOME、$APPDATA)以及相对路径,返回标准的绝对路径,这是is_allowed方法的必要前提。
  • FsScope获取:AppHandle::fs_scope()会直接加载tauri.config.json中allowList.fs.scope的配置,无需手动实例化。
  • 权限匹配:is_allowed的第二个参数需明确是Read还是Write,对应allowList.fs中开启的readFile/writeFile权限。
  • 你的配置适配:针对你提供的"$HOME/some_folder/*"范围,is_allowed会自动校验路径是否位于$HOME/some_folder目录或其子目录下。

注意事项

  • 确保所有自定义文件操作都前置此校验,避免绕过Tauri的权限限制导致安全风险。
  • 若使用WindowHandle而非AppHandle,同样可以通过window_handle.fs_scope()获取相同的权限范围实例。

内容的提问来源于stack exchange,提问作者dossimus maximus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:45:29