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 在服务器端进行一些网页本地化。

如果我上传一个文件

  • 铁 18.0.1050.0
  • 歌剧 11.64.1403
  • 火狐 3.6.27
  • 火狐12.0
  • 谷歌浏览器 19.0.1084.52
  • 海猴 2.9.1

一切正常。但是如果我上传一个文件

  • 即 9.0.8112.16421
  • 麦克斯顿 3.3.8.3000

本地化失败。我在 HTTP 请求中检测到问题:

歌剧 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 的安全区域模型默认允许“上传文件时包含本地目录路径”。我只能通过更改客户端配置来禁止这种行为,但我仍在寻找基于应用程序的解决方案。[/编辑]

4

2 回答 2

0

尝试将空格替换为'%20'

"C:\Documents%20and%20Settings\m1krsch\Documents\Now%20Some%20Spaces\ziptest.zip"
于 2012-05-31T18:13:50.987 回答
0

我在本地化代码中发现了一个愚蠢的错误。为此,我使用 RapidXML 并将整个本地化代码和 RapidXML 标头封装在一个类中。不幸的是,我没有非常仔细地阅读文档。保存 XML 文档数据的对象内部的数据不会按预期使用该方法vector<char>复制到 XML 文档对象中。这对我来说看起来像是程序 C 代码,在我看来是糟糕的 OOD。文档说:xml_document<>parse()

3.1 源文本的生命周期

原位解析要求源文本至少与文档对象一样长。

当我更正代码以vector<char>在本地化类中获取全局对象时,问题就消失了。

尽管如此,我很困惑为什么大多数其他浏览器都对我的旧代码没有问题。

于 2012-06-05T20:49:06.083 回答