简介

谈到 Python 中的路径拼接,大家会想到什么?

  • os
  • pathlib

以上两个模块都是 Python 内置的模块,可以很方便的帮助我们完成路径的拼接而不需要担心不同系统下的路径格式问题,但却存在一个严重的安全风险:路径穿越

# os.path.join
>>> os.path.join('/home/download', '../../opt/logo.png')
/home/download/../../opt/logo.png# pathlib
>>> pathlib.Path('/home/download') / '../../opt/logo.png'
/home/download/../../opt/logo.png

倘若你未加校验便写入文件,期望中,文件被写入到 /home/download 目录下,实际却被写入到了 /opt 目录中

file_path = os.path.join('/home/download', '../../opt/logo.png')
with open(file_path, 'w') as f:f.write('hello')

利用

假设一个场景:

  • 你想要爬取一个 mm 网站的图片

  • 抓包之后,发现网站竟 “友善“ 地提供一个接口:

  • 不加思索,写下如下代码:

    for item in d:img_content = requests.get(item['download_url']).contentwith open(os.path.join('/home/download', item['file_name']), 'wb') as f:f.write(img_content)
    
  • 当你美滋滋的查看美女图片时,殊不知,一个恶意文件已经下载到了你的电脑

进阶

也许,你会存在侥幸心理,只能拼接相对路径有什么用,我换一个路径执行不就失效了吗?

且慢,通过 Python 文档,我们可以发现这个方便却又危险的机制:

效果如下:

>>> os.path.join('/home/download', '/opt/logo.png')
/opt/logo.png>>> pathlib.Path('/home/download') / '/opt/logo.png'
/opt/logo.png

基于此,恶意文件便可以存储至任意位置!

警惕: Python 中的路径穿越相关推荐

  1. python文件路径拼接多出斜杠_浅谈python中拼接路径os.path.join斜杠的问题

    浅谈python中拼接路径os.path.join斜杠的问题 调试程序的过程中,发现通过os.path.join拼接的路径出现了反斜杠 directory1='/opt/apps/upgradePac ...

  2. python中filepath路径怎么写_详解Python中的路径问题

    1. 绝对路径引入 Python 在搜索模块时,依次搜索sys.path里的位置,直到找到模块为止.下面命令可以查看当前的搜索路径: import sys print(sys.path) sys.pa ...

  3. python中文件路径的设置

    文件路径设置的方法:   首先要区分"\"和"/".系统中的路径用的是反斜杠"\",而在python代码中反斜杠"/"代 ...

  4. Python中的路径操作

    Python中的路径操作 一.基于Python内部函数的路径操作 1.OS下的路径操作 2.从完整路径中分离文件名与路径 3.读取文件夹中特定类型的文件 二.基于第三方安装包的路径提取 1. 获取当前 ...

  5. Python 中的路径问题

    Python中os模块的使用 1. python路径的查看与修改 查看路径:os.getcwd() 修改路径:os.chdir("新的路径名") import os# 显示当前路径 ...

  6. python中绝对路径的区别,理解Python中的绝对路径和相对路径

    本文介绍了Python中的绝对路劲和相对路径,分享给大家,也给自己留个笔记 1.绝对路径 os.path.abspath("文件名"): 显示的是一个文件的绝对路劲 eg: > ...

  7. python中的路径问题汇总

    路径书写格式 windows系统中,'\'与'/'均可以在书写路径中使用,但在字符串里面\被作为转义字符使用 网页网址和linux.unix系统下一般都用'/' python在描述路径时有两种方式: ...

  8. python 中的路径. ./ .. ../和相对路径的写法

    相对路径的读取:参考:Python读取相对路径文件 与Linux系统中一样: . 代表当前所在目录 . . 代表当前所在目录的父目录 . / 代表当前所在目录下的某个文件夹或文件 . . / 代表当前 ...

  9. python中文件路径如何读取提示nosuch file_Python 解决相对路径问题:No such file or directory...

    如果你取相对路径不是在主文件里,可能就会有相对路径问题:"No such file or directory". 因为 python 的相对路径,相对的都是主文件. 如下目录结构: ...

最新文章

  1. Nmap安装和扫描(二:Nmap基本操作)
  2. phonegap+jquerymobile开发android的心得(6)
  3. IOS开发中UIBarButtonItem上按钮切换或隐藏实现案例
  4. mysql selectprovider_使用Mybatis的@SelectProvide会不会导致注入攻击?
  5. AQS.addWaiter
  6. Spring Annotation知识梳理
  7. WIn7虚拟机下运行H3CCloud出错问题
  8. iPhone SE 3渲染图曝光:还是熟悉的味道
  9. python向数据库中添加参数_python往mysql数据库中写入数据和更新插入数据
  10. BT.1120数据流解释
  11. 【自考】数据结构导论—二叉树计算题
  12. 商标主要特征是什么?商标注册申请流程是什么?
  13. 性能测试工具loucst使用(最新版本)
  14. facebook最全面中文介绍,让你更加了解facebook
  15. java多线程 isAlive方法的有趣现象
  16. 十年牧码,我的平凡之路 | 程序员有话说
  17. vm安装中标麒麟v7.0
  18. Windows系统下Python安装教程
  19. C语言的 a, *a, a
  20. redux与flux

热门文章

  1. 神经网络控制系统的应用,神经网络控制基本原理
  2. 发过离职申请流程的用户撤销流程后无法发短信
  3. day 5 文字溢出处理 背景图片处理 开发经验
  4. 18.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
  5. java一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
  6. 人月神话读书笔记(3)外科手术队伍
  7. python猴子分桃子的数学题_python 统计桃子的个数(猴子分桃子)
  8. 计算机应用每次开机都清空,win10每次开机都会重置默认设置怎么办呢?
  9. python win10 捕获 弹出窗口_Selenium-webdriver 系列Python教程(6)————如何捕获弹出窗口...
  10. 【代码随想录】二刷-哈希表