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 = 检查是否在目录内的核心工具

相关推荐
belldeep2 小时前
python:genesis-world, Genesis-Embodied-AI
人工智能·python·ai·genesis
benchmark_cc3 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
维克兜率天4 小时前
【维克】趋势型CTA:期货市场的“追涨杀跌“
人工智能·python
取名真是4 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
梦想不只是梦与想5 小时前
PyTorch、CPU、GPU、CUDA
人工智能·pytorch·python·深度学习·机器学习·cuda
数字融合5 小时前
透明化视频孪生危化安全管控解决方案
人工智能·python·安全
别问!问就是全会6 小时前
Jupyter Notebook 安装包下载|单元格分块运行,图表直接内嵌
ide·python·其他·jupyter
深蓝AI7 小时前
Python 缓存击穿实测:16 个并发请求如何只回源 1 次
python
benchmark_cc7 小时前
用 00700.HK 做港股行情清洗:字段核对、校验与个人量化开发实践
python·数据分析·pandas·量化交易·股票数据·quantdash
zh路西法7 小时前
【PACE】面向永磁同步电机PMSM 执行器的参数辨识与能耗感知强化学习 Sim-to-Real
python·cma-es·pmsm·sim-to-real·issac·pace