我已经创建了一个应用程序,它从hg存储库中获取项目的标记版本,并创建一个可下载的ZIP文件,该文件包含已标记的版本。
使用CodeIgniter的ZIP编码库在运行Linux的MediaTemple服务器上创建文件。一切正常......在Mac上。但是,当我在Windows计算机上下载文件时,将阻止存档被解压缩。
ZIP包含.html
,.css
,.gif
,.png
和.js
个文件,我很确定.js
个文件是安全的罪魁祸首,但我想知道为什么我可以将Jcrop jQuery plugin(或任何其他示例)作为ZIP文件下载并在没有Windows干扰的情况下提取它,即使它显然包含.js
个文件,但是关于我的ZIP文件存在安全风险。
通常情况下,我会为我的特定情况找到一个快速的软件解决方法,但由于计划是出售对这些文件的访问权限,因此快速软件修复或常见问题解答似乎不是非常用户友好。
任何反馈都将不胜感激!如果您需要更多信息,请告诉我。
您可以下载示例文件here。
修改
编辑2:
编辑3:
/
,文件名出现了问题。我上传了我的应用生成的new example download文件名修复程序,您可以下载here。如果能解决问题,请告诉我。答案 0 :(得分:4)
实际上,领先的'/'是导致不允许提取zip的原因。我已经通过编写Python脚本来创建zip文件的修改版本而没有绝对文件路径来证明这一点:
from zipfile import *
orig = ZipFile('download.zip', 'r')
fixed = ZipFile('fixed.zip', 'w')
for fileinfo in orig.infolist():
fixed.writestr(fileinfo.filename[1:], orig.read(fileinfo.filename))
fixed.close()
(这不会重新压缩文件,但它证明它是导致问题的文件名)
如果您正在使用CodeIgniter zip库的函数read_dir
,那么这必须是使用绝对文件路径的罪魁祸首。尝试使用PHP递归遍历目录结构,而是使用add_data
函数。这允许您为每个文件使用任意路径结构,因此您可以编写相对路径。
答案 1 :(得分:3)
使用完整目录路径而不是相对路径压缩文件时会发生这种情况。你可以在这里找到这个问题的一个例子:
http://community.sharpdevelop.net/forums/p/1416/4532.aspx#4532
您可能需要使用其他zip工具或自己编写。
答案 2 :(得分:0)
可能有助于提及您正在使用的Windows版本以及您获得的确切错误。它是Windows 7,你试图在受保护的文件夹中打开文件,或者你只是想在桌面上打开它?
我认为这与zip文件的制作方式无关,但我可能错了。