安全使用舒蒂尔.rmtree/ os.path.join操作系统和目录遍历

2024-05-22 00:49:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个预定义的路径,它与userinput连接以删除特定目录。当前代码如下所示,如果使用这样的userinput,则会造成非常严重的危害:

import os
import shutil
userinput = '../../'
path = os.path.join('/my/self/defined/path', userinput)
shutil.rmtree(path)

这显然允许用户删除任何文件或目录。有什么好方法可以“囚禁”用户,所以它只能输入/my/self/defined/path以下的任何路径,处理../或以{}开头的字符串以及我可能想不到的所有其他恶意输入?在


Tags: path代码用户importself路径目录危害
2条回答
import os
import shutil
import sys
userinput = '../../'
selfdefinedpath = '/my/self/defined/path'
path = os.path.join(selfdefinedpath, userinput)
if not selfdefinedpath in os.path.realpath(path):
  print 'not proper path %s' % path
  sys.exit()
shutil.rmtree(path)

怎么样

my = os.path.abspath('/my/self/defined/path')
new = os.path.abspath(path)
if len(new) < len(my) or not new.startswith(my):
   print 'bzzzt'

http://docs.python.org/2/library/os.path.html

相关问题 更多 >