Python:处理URL中的&符号&文件路径

时间:2016-03-29 14:34:51

标签: python python-2.7 url path ampersand

我正在使用Python脚本处理请求的PDF,然后再将它们呈现给浏览器。 PDF的路径作为URL参数给出。尝试打开PDF之前的一个安全措施是确保路径在webroot中,并且文件以“.pdf”结尾。为此,我将请求的路径拆分为其目录数组和文件名。这在大多数情况下都能正常工作......

但是,至少有一个可能的路径在目录名中包含一个&符号。当处理器到达此目录时,它会在&符号处短路并报告所请求的文件不是PDF。我正在转储目录数组,我可以看到包含带&符号的目录名的元素在它之前被截断:'a& b'变成'a'。这是测试文件扩展名的代码:

if splitpath[len(splitpath) - 1][-4:].lower() != '.pdf':
  print "Content-type: text/plain\n"
  print "Requested file is not a PDF."
  print splitpath
  sys.exit()

如果我尝试请求?file=/alwaysbrand/pdfs/a & b/myfile.pdf,则此代码返回:

Requested file is not a PDF.
['var', 'www', 'alwaysbrand', 'pdfs', 'a ']

任何想法如何让Python在遇到&符时阻止窒息?不幸的是,在这种情况下,重命名目录不是一种选择。

编辑:在做其他任何事情之前,我已经尝试使用urllib.unquote_plus分配路径,但它仍然停止在&符号处解析:

fullpath = urllib.unquote_plus(os.path.abspath(form["file"].value[1:]))
print "Content-type: text/plain\n"
print fullpath

在传递/var/www/alwaysbrand/pdfs/a时返回?file=/pdfs/a%20&%20b/myfile.pdf(空格正确不加引号,而不是&符号或其后的任何内容)。

0 个答案:

没有答案