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

相关推荐
MeixianAgent22 分钟前
Python 回测数据入口怎么验?历史 K 线入库前先做 5 个检查
后端·python
咕白m6254 小时前
用 Python 实现一键批量查找与替换 Excel 数据
后端·python
SelectDB21 小时前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
荣码1 天前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
金銀銅鐵2 天前
[Python] 基于欧几里得算法,实现分数约分计算器
python·数学
Lyn_Li2 天前
Kaggle Top 5 | 198只股票、200条数据的金融预测——BattleFin高分方案从零复现
python·kaggle·比赛复盘·金融预测
小九九的爸爸2 天前
前端想要入门Agent开发,要具备哪些Python基础?
python·agent·ai编程
阿耶同学2 天前
手把手教你用 LangGraph 搭建三层嵌套 Agent 架构
python·程序员
花酒锄作田3 天前
Pydantic校验配置文件
python
hboot3 天前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络