防止在 Content-Disposition 的 "filename" 中出现绝对文件路径

3
我有一个简单的HTML表单。
<form id="uploadForm" method="post" action="/cgi-bin/test.cgi" enctype="multipart/form-data">
   <input type="submit" name="add_something" value="add">
   <input size="50" type="file" name="myFile" accept="application/zip">
</form>

此外,我通过检查用户浏览器语言或搜索自设语言会话cookie,在服务器端进行网页本地化。如果我使用以下版本上传文件:
Iron 18.0.1050.0 Opera 11.64.1403 Firefox 3.6.27 Firefox 12.0 Google Chrome 19.0.1084.52 SeaMonkey 2.9.1
一切正常。但是,如果我使用以下版本上传文件:
IE 9.0.8112.16421 Maxton 3.3.8.3000
本地化将失败。我在HTTP请求中检测到了问题:
Opera 11
Content-Disposition: form-data; name="myFile"; filename="ziptest.zip"
Content-Type: application/zip

以及IE 9

Content-Disposition: form-data; name="myFile"; filename="C:\Documents and Settings\m1krsch\Documents\Now Some Spaces\ziptest.zip"
Content-Type: application/x-zip-compressed

如果我从路径中删除空格,在IE和Maxton中所有都能正常工作。
既不能更换已使用的cgicc库,因为它是项目的固定部分,也不能强制用户使用没有空格的路径。我该如何解决这个问题?有没有一种方法可以强制IE/Maxton使用文件名而不是绝对文件路径?或者我可以在cgi/env中设置特定参数以防止传输绝对文件路径?
[编辑] 我发现这是IE和Maxton中的安全问题。 IE的安全区模型默认允许“上传文件时包括本地目录路径”。我只能通过更改客户端配置来禁止此行为,但我仍在寻找基于应用程序的解决方案。 [/编辑]

我发现自己想要将你的问题“编辑”作为另一个答案。它确实为更广泛的问题提供了有用的答案。我会投赞成票 :-) - dbreaux
2个回答

0

尝试用'%20'替换空格:

"C:\Documents%20and%20Settings\m1krsch\Documents\Now%20Some%20Spaces\ziptest.zip"

我尝试使用JavaScript更改表单输入“myFile”的值字段,但它不起作用。目前,我找到了一个不理想的解决方法,通过更改IE安全区域“本地网络”的设置来上传文件时不包括本地目录路径。但我不想重新配置每个客户端PC。我需要一种基于应用程序的解决方案,而不是可配置的解决方案。 - kirsche40

0
我在本地化代码中发现了一个愚蠢的错误。我正在使用RapidXML,将整个本地化代码和RapidXML头封装在一个类中。不幸的是,我没有仔细阅读文档。在保存XML文档数据的 vector<char>对象中的数据没有如预期使用 parse()方法复制到XML文档对象 xml_document<>中。这看起来像是程序式C代码,并且在我看来违背了好的OOD思想。文档说:

3.1源文本的寿命

原地解析要求源文本的寿命至少与文档对象一样长。

当我修改了代码,让我的本地化类得到一个全局的vector<char>对象时,问题消失了。

然而,我很困惑为什么大多数其他浏览器都没有问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接