python relative_to

python 复制代码
def get_repo_path(file_path: str) -> Path:
    """Resolve repo path, ensuring it stays inside REPO_ROOT."""
    # Prevent path traversal
    normalized = os.path.normpath(file_path)
    if normalized.startswith("..") or os.path.isabs(normalized):
        raise HTTPException(status_code=403, detail="Forbidden")
    target = (REPO_ROOT / normalized).resolve()
    # security check
    try:
        target.relative_to(REPO_ROOT.resolve())
    except ValueError:
        raise HTTPException(status_code=403, detail="Forbidden")
    return target

最近在用ai写代码,发现它写的一个限制访问路径的方法,挺有意思的(如上代码)。


这个函数的作用

这个函数是Web 服务里的安全防护函数,核心只有一件事:

只允许用户访问项目根目录(REPO_ROOT)内部的文件,绝对禁止访问外面的任何文件。

这是为了防止黑客做 路径遍历攻击(Path Traversal Attack)

比如黑客传一个路径:
../../etc/passwd

想偷看你服务器的系统文件,这个函数会直接拒绝,返回 403 禁止访问。


函数执行步骤(简单版)

  1. 接收一个用户传入的路径 file_path
  2. 先做基础检查:不能是绝对路径,不能以 .. 开头(防止跳目录)
  3. 把用户路径和项目根目录拼起来
  4. 最关键一步:检查拼接后的路径,是否真的在项目根目录里面
  5. 如果在里面 → 返回合法路径
  6. 如果跑到外面去了 → 直接 403 拒绝

relative_to 是什么?

relative_to 是 Python pathlib.Path 的方法。

作用

判断一个路径,是不是另一个路径的"子路径"

例子

python 复制代码
REPO_ROOT = Path("/home/my/project")
target = Path("/home/my/project/src/app.py")

target.relative_to(REPO_ROOT)
# 成功 → 说明 target 在 REPO_ROOT 里面

如果路径跑到外面了:

python 复制代码
target = Path("/etc/passwd")
target.relative_to(REPO_ROOT)
# 报错 ValueError

总结一句话

relative_to 就是用来检查:这个文件是不是乖乖待在项目目录里,没跑到外面去。


完整通俗总结

这个函数 = 路径安全守门员

  • 你给它一个文件路径
  • 它拼命确保这个路径不会逃出项目根目录
  • 逃出去 → 403 禁止
  • 乖乖在里面 → 返回合法路径

relative_to = 检查是否在目录内的核心工具

相关推荐
若兰幽竹4 小时前
【大模型应用】抖音爆款视频深度分析系统:流水线式AI逆向拆解流量密码,精准预测播放量!
人工智能·python·音视频·抖音爆款分析
心中有国也有家4 小时前
pytorch-adapter:让 PyTorch 模型“无缝”跑在昇腾 NPU 上
人工智能·pytorch·笔记·python·学习
import_random4 小时前
[python]numpy模块(详解)
python
SilentSamsara4 小时前
泛型与 Protocol:结构化子类型的地道写法
开发语言·python·青少年编程
独隅4 小时前
PyCharm 接入 Codex 的全面指南
ide·python·pycharm
OrangeForce4 小时前
Monknow 书签导出工具:从本地存储提取数据并转为标准 HTML 书签
javascript·chrome·python·edge·html·firefox
才兄说5 小时前
机器人二次开发机器狗巡检?实时路径动态更新
python
yaoxin5211235 小时前
414. Java 文件操作基础 - 批量压缩与索引:将154首十四行诗高效存储为带目录的二进制文件
java·windows·python
繁星星繁5 小时前
Python基础语法(二)
android·服务器·python
毋语天5 小时前
Pandas 数据处理进阶:缺失值、合并、分组聚合与透视表
python·数据分析·pandas·数据清洗·透视表