1

我有一个预定义的路径,它与用户输入连接以删除特定目录。当前代码看起来像这样,并且给定这样的用户输入会造成非常严重的伤害:

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

这显然将允许用户删除任何文件或目录。什么是“监禁”用户的好方法,所以只能输入下面的任何路径/my/self/defined/path,处理../或启动字符串/以及我可能没有想到的所有其他恶意输入?

4

2 回答 2

0

怎么样

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

于 2013-08-21T13:10:01.527 回答
0
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)
于 2013-08-21T13:13:02.307 回答