阻止内容处置"filename"中的绝对文件路径
prevent absolute file path in Content-Disposition "filename"
>我有一个简单的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
一切正常。但是如果我上传一个文件
- 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 Settingsm1krschDocumentsNow Some Spacesziptest.zip"
Content-Type: application/x-zip-compressed
如果我从路径中删除空格,则在IE和Maxton中一切正常。
我可以交换使用的cgic库,因为它是项目的固定部分,也不能强制用户使用没有空格的路径。如何规避此问题?有没有办法强制IE/Maxton使用文件名而不是abolute文件路径?或者我可以在 cgi/env 中设置一个特定的参数来防止传输 abolute 文件路径吗?
[编辑]我发现这是IE和Maxton中的安全问题。IE 的安全区域模型默认允许"上传文件时包含本地目录路径"。我只能通过更改客户端配置来禁止这种行为,但我仍在寻找基于应用程序的解决方案。[/编辑]
尝试将空格替换为 '%20'
:
"C:Documents%20and%20Settingsm1krschDocumentsNow%20Some%20Spacesziptest.zip"
我在本地化代码中发现了一个愚蠢的错误。我为此使用RapidXML,并将整个本地化代码和RapidXML标头封装在一个类中。 不幸的是,我没有非常仔细地阅读文档。vector<char>
对象中的数据(保存 XML 文档数据)不会按预期复制到使用 parse()
方法xml_document<>
的 XML 文档对象中。这对我来说看起来像过程 C 代码,在我看来是糟糕的 OOD。文档说:
3.1 源文本的生存期
原位分析要求源文本的生存时间至少与文档对象的寿命一样长。
当我更正代码以在本地化类中获取全局vector<char>
对象时,问题消失了。
尽管如此,我很困惑为什么大多数其他浏览器对我的旧代码都没有问题。
- 从函数角度看ID到文件路径的内部与外部映射
- 在C++中设置基于操作系统的文件路径
- Windows 非 ASCII 文件路径
- 非 ASCII 文件路径窗口
- C++和带有国家符号的文件路径(也许用 UTF8 编码)
- 如何为文件路径使用变量?
- 包括 VS Code 上的完整文件路径
- 如何使用提升获取当前文件路径?
- 如何在 c++ 中获取当前文件路径?
- 保存json文件后如何返回文件路径
- 从 C++ 中的文件路径中提取文件名
- 是否可以将文件路径传递给Qt中的setStyleSheet()
- 无法转换 .CATPart 文件.错误:输入文件路径似乎包含不支持的字符
- 在结构函数之间传递文件路径 C++ 编辑:修复LNK2019错误
- 提供依赖于输入的程序的文件路径
- 从 QFileSystemModel 中的文件路径和文件名获取 QModelIndex
- 如何更改变量文件名的文件路径?
- cmake:包括vs vs add_subDirectory:相对标头文件路径
- 在OSX中使用CGDisplayStream存储屏幕记录的特定文件路径
- 如何在另一个系统上启用文件路径