c++ - 防止 Content-Disposition 中的绝对文件路径 "filename"

标签 c++ forms cgi filenames content-disposition

我有一个简单的 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>

此外,我通过检查用户浏览器区域设置或搜索自己设置的语言 session cookie,在服务器端进行一些网页本地化。

如果我上传一个文件

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

一切正常。但是如果我用

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

最佳答案

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

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

关于c++ - 防止 Content-Disposition 中的绝对文件路径 "filename",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10838899/

相关文章:

javascript - 提交选择选项和当前页面 url 参数

python - 如何在 Python 3 CGI 中打印 unicode 字符?

c++ - clang : warning: argument unused during compilation: '-stdlib=libc++'

.NET 兼容性限制

c++ - 需要有关 boost 同步对象的教程

django - 如何使用 django 将表单数据从一个页面发送到另一个页面

ruby-on-rails - Rails 在显示 View 中使用编辑操作

perl - 为什么我的 Perl CGI 程序返回服务器错误?

perl - 如何在 Perl 中关闭和重新打开 STDOUT?

C++11 声明 `::T i` ?