使用“;”下载文件或文件名中的“#”会破坏文件名

2023-12-26

我有一个名为 AttachmentDownload.aspx 的文件,并且 Page_Load 方法内部有这样的代码,可以提供下载文件。除包含“;”的名称外,所有名称均可在 IE 中正常工作。或者 ”#”。他们允许用户以“AttachmentDownload.aspx”名称保存文件。有解决方法吗?

这是一个例子:

var fileName = Server.UrlPathEncode (";%.txt");
Response.AddHeader("content-disposition", String.Format("attachment;filename=\"{0}\"", fileName));
Response.WriteFile(path);
Response.End();

除包含“;”的名称外,所有名称均可在 IE 中正常工作。或者 ”#”。

我无法用“#”重现问题,但“;”肯定会破坏它。 '"' 和 '\' 也是如此(你可以在 Unix 上的文件名中使用它们,这会破坏你的引用字符串)。

在 RFC822 系列参数化标头(例如 Content-Disposition)中包含带外字符的“正确”解决方案定义在RFC1521 http://www.ietf.org/rfc/rfc1521.txt:不能包含在‘token’中的字符串应该用引号括起来,这RFC2822 http://www.ietf.org/rfc/rfc2822.txt定义为将 " 和 \ 字符反斜杠转义,然后用引号引起来。

RFC2231 http://www.ietf.org/rfc/rfc2231.txt然后用一种非常复杂的方式扩展它,在标头参数中包含非 ASCII 字符,理论上您会希望使用它来支持 Unicode 字符。

实际上:HTTP 并不是真正的 RFC822 系列规范,并且这些内容在常规​​浏览器中都不起作用(除了 Opera 中的反斜杠转义符)。没有可靠的方法来向客户端获取 Unicode Content-Disposition 文件名,并且“;”的问题不是因为任何转义问题,而只是因为 IE 无法解析太妃糖的参数化标头(它在字符串中的下一个分号,即使它被引号包围)。

为了实现可靠的跨浏览器文件名设置,您可以在现实世界中采取两种方法:

  1. 在将文件名放入 Content-Disposition 标头之前,先删除文件名中的任何攻击性内容。这包括前导/尾随空格/点、大多数其他标点符号和任何非 ASCII 的内容。

  2. 根本不要在 Content-Disposition 标头中指定文件名,让浏览器从 URL 的最后部分确定要使用的文件名。要阻止它选择“AttachmentDownload.aspx”,您可以将任何您喜欢的内容作为尾随 URL 部分,例如:

    http://www.example.com/AttachmentDownload.aspx/Foo%23Bar http://www.example.com/AttachmentDownload.aspx/Foo%23Bar

这要求您使用纯 URL 编码和 UTF-8 的 Unicode 字符对大多数标点符号进行编码,但至少您可以获取字符。上面的结果会出现“Foo;Bar”的文件下载提示。

请注意,即使您can像这样在 URL 路径部分中编码像 '"' 这样的 Windows 不友好字符,对于下载的文件最好不要这样做,因为 IE 会通过尝试在文件名中使用 '"' 来保存文件来响应,并且会默默地、神秘地响应失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用“;”下载文件或文件名中的“#”会破坏文件名 的相关文章

  • 参考装配错误

    我已经实现了 RoleProvider 类 在那里我创建了位于另一个程序集中的 Domain 类对象 我的程序集具有对该程序集的引用 错误 3 类型 System Data Entity DbContext 是在 未引用的程序集 您必须添加
  • ASP.NET 更新面板停止 jquery 工作

    我已经为 mouseenter mouseleave 以及 jquery Draggable 绑定了 jquery 事件集 div 被放置在更新面板中 当单击按钮时 信息将发送到数据库并更新更新面板 但是 当面板更新时 jquery 事件不
  • global.asax 范围和生命周期澄清

    我需要在我当前正在进行的项目中实现多个应用程序级行为 有几件事我需要弄清楚 1 在哪里以及如何定义应用程序级变量 2 这些变量的生命周期是多长 或者更准确地说 在什么情况下它们会被丢弃 应用程序池回收 应用程序二进制文件从内存中删除并在下一
  • 在 Mac 上开发和测试 ASP.NET 的应用程序 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我开始学习一些asp net 所以我正在寻找一个使用mac 开发asp net 的应用程序 我知道 D
  • ASP.NET Webform 中的异常处理

    在 ASP NET Webforms 中处理异常的首选方法是什么 你有Page Error您添加的方法 我认为 web config级别 并且当发生错误时整个站点将被重定向到该级别 这是否意味着您不应在 Web 表单应用程序中的任何位置使用
  • 将图像添加到 ASP.Net 中的单选按钮列表

    我正在尝试将图像添加到单选按钮列表控件 但它不起作用 我试过这个 RadioButtonList2 Items Add new ListItem String Format src Colors Dallas 625527 1 1 png
  • 什么可能会在一台服务器上导致此错误,而在另一台服务器上则不会?

    我们有一个连接到外部 Web 服务的 ASP Net 网站 几天前它突然停止工作 基本代码是这样的 Try request New ExternalWebService ProcessRequestService Error occurs
  • sitecore 站点内嵌套虚拟目录或应用程序是否可能

    我想将 ASP NET Web 应用程序嵌套在 sitecore 站点中 如下所示
  • ASP.NET WebApi - 一个控制器中的多个 GET 操作

    I have Users控制器和基本 REST 模式工作得很好 不过我需要一种额外的模式users id usergroups这将返回该用户的所有用户组 实现这一点的最佳方法是什么 因为我想我将需要在更多控制器上使用类似的路由 仅使用默认值
  • 在我的网站上显示 Google Analytics(分析)仪表板

    我设置了一个 ASP NET 网站 并使用 Google Analytics 进行页面跟踪 我唯一不喜欢的是我必须离开我的网站 到 Google Analytics 网站 才能看到该报告 有什么方法可以使用他们拥有的所有 AJAX 在我自己
  • 使用 AJAX 或多线程加速页面加载

    我的页面有 5 个部分 每个部分大约需要 1 秒来渲染 Page Load RenderSection1 1 sec RenderSection2 1 sec RenderSection3 1 sec RenderSection4 1 se
  • 导出到 CSV 时 Gridview 出现空行

    这个问题是由进一步讨论引发的这个问题 https stackoverflow com questions 6674555 export gridview data into csv file 6674589 noredirect 1 com
  • 设置 runat=server 时输入名称和 id 发生变化

    在我的表单中 我需要插入 文本 类型的不同输入 输入必须是带有名称和 ID 的 html 控件 因为我将此表单发送到外部网址 对于验证 我在所有输入中执行 runat server 然后我可以使用 requiredfieldvalidato
  • 如何在ASP.NET服务器的web.config文件中使用Azure Pipeline中设置的环境变量?

    我打算在 ASP NET 中使用 Azure Pipeline 中的以下环境变量web config file
  • 确定最接近的已知颜色

    我允许我的应用程序的用户选择自定义颜色 并希望有一种方法来显示每种颜色的友好名称 而不是显示十六进制代码的文本表示形式 我如何找到最近的System Drawing Color对于给定的十六进制代码 希望这对某人有帮助 Public Fun
  • ASP.NET预编译的优点是什么?

    使用 Aspnet compiler exe 代替通过 Visual Studio 进行的传统发布有多有用 那么资源 resx 文件又如何呢 与简单的 xcopy 相比 预编译有两个主要优点 文件系统不会包含所有代码 aspx文件和后面的所
  • VSTS/TFS设置环境变量ASP.NET core

    我正在尝试使用 VSTS 将 ASP NET Core 应用程序部署到 IIS 并执行以下任务 然而 经过多次谷歌搜索和浏览 MS 文档后 我找不到为部署设置环境变量的方法 我在环境范围的发布定义中设置的变量未设置为环境变量 知道如何实现这
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 在 iFrame 内维护会话状态

    不确定我是否疯了 但我在 iFrame 内的会话状态遇到问题 它是一个域在另一个域中的简单设置 我不需要跨域共享任何内容 我想做的就是将一个网站嵌入到另一个网站中 并且我希望该嵌入网站能够使用 cookie 会话状态登录 编辑 更新 等 为
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S

随机推荐

  • 通过更改底层数组动态更新 dom-repeat 模板

    是否有 Polymer dom api 方法或其他方法可以使用附加元素自动更新重复模板 如果底层数组需要更新 我有一个动态数组 它通过 ajax 调用重复进行更新 该数组不断改变其长度 元素根据 ajax 响应增量添加或删除 该数组通过以下
  • 根据活动数据创建 id 列

    我有一张桌子EVENTS USER EVENT TS EVENT TYPE abc 2016 01 01 08 00 00 Login abc 2016 01 01 08 25 00 Stuff abc 2016 01 01 10 00 0
  • 如何读取 Windows 7 上的启动时间事件?

    我尝试使用 ETW 函数读取文件但没有成功 C Windows System32 winevt Logs Microsoft Windows Diagnostics Performance 4Operational evtx 为了捕获启动时
  • 在运行时将实例方法设为私有

    在另一个对象中注册该对象后 我需要将一些实例方法设为私有 我不想冻结该对象 因为它必须保持可编辑状态 只是功能较少 我不想取消定义这些方法 因为它们是在内部使用的 我需要的是这样的 class MyClass def my method p
  • 将列表拆分为N个列表,并将每个列表分配给多线程中的一个worker

    我正在编写一个脚本 它从表中获取 N 条记录 并通过多线程处理所述记录 以前 我只是在每个工作定义中的 SQL 语句中使用 Order by RAND 并希望不会出现重复 这种工作 重复数据删除稍后完成 但是 我想通过以下方式使我的脚本更加
  • Woocommerce - 允许针对不同状态再次订购

    我希望允许Order Again所有状态的功能 默认情况下 WooCommerce 仅允许状态为 已完成 的订单使用此功能 这似乎是一个两步过程 因为第一步需要向用户显示按钮 这是通过编辑此文件来完成的 wc template functi
  • libclang:添加编译器系统包含路径(Windows 中的 Python)

    按照此question https stackoverflow com questions 37098725 parsing with libclang unable to parse certain tokens python in wi
  • Nodejs HTTP Createserver - 从 html 文件提供服务时不可预测的 javascript 执行

    当我从我的 Node js Web 服务器提供具有一些 JavaScript 的 html 文件时 与我从外部源包含相同的 JavaScript 时相比 我得到了不同的结果 我已经验证 使用 javascript 内联或外部源直接打开 ht
  • RecyclerView 项目在片段之间切换后消失

    我的应用程序中有 4 个片段 它们在 NavActivity 中管理 protected void onCreate Bundle savedInstanceState super onCreate savedInstanceState s
  • Hibernate不创建连接表

    我遇到了一个以前从未发生过的问题 我有ManyToMany关系 Hibernate 不会创建连接表 它仅创建实体表 我正在将 SpringDataJpa 与 MySQL 一起使用 医生实体 Entity Table name doctors
  • 从等高线生成高度图的算法是什么?

    我正在寻找插入一些轮廓线来生成 3D 视图 轮廓不存储在图片中 轮廓的每个点的坐标仅存储在 std vector 中 对于凸轮廓 似乎 我自己没有检查 通过使用两个最接近轮廓的两个最近点之间的距离可以轻松计算高度 线性插值 我的轮廓不一定是
  • 何时在 clojure(或 lisp)中使用感叹号?

    他们说在命名不纯函数时使用感叹号 但我不太理解 不纯 的功能 他们是吗 函数更改其参数的状态 通过重置 更改 java object methods 函数发生副作用 例如 打印 吐出 or both 显然 官方的 clojure api 并
  • 无法解析的外部符号(OpenGL 和 C++)

    好的 所以我正在编写一个小项目 没什么复杂的 它只有几个类 正如标题所暗示的 它使用 OpenGL 目前 还没有 真正的 主要功能 我在使用 gl 函数调用的地方都包含了 glew h 并将其添加到链接器输入 glew32 lib 中 然而
  • 如何在python中使用套接字而无需等待

    我用Python创建了一个游戏 该游戏由几条蛇组成 每条蛇由不同的计算机控制 每台计算机都会向服务器计算机发送蛇所指向的角度 问题是该命令 client mess client socket recv 1024 极大的抑制了服务器的运行 导
  • 使用 aws-sdk 从 javascript(reactjs) 调用 lambda(node/express - 无服务器快速路由)

    Reactjs const result await invokeLambda points 调用Lambda js const AWS require aws sdk AWS config update accessKeyId id se
  • 调试时忽略 Visual Studio 中的项目

    在 Visual Studio 中 如果您有一个包含许多项目的解决方案 是否可以指示调试器忽略某些项目 在这个意义上将它们视为外部 DLL 吗 我们有很多我想调试的帮助程序代码 例如 如果我处于函数调用中 并且进入其中 我想跳过 IoC 代
  • 数组的 IsEmpty() 函数

    我想测试我的数组是否为空 我尝试使用该功能IsEmpty 但函数总是返回False 并且不要输入 if 条件 我的代码如下 Sub Freeze Dim tab freeze as variant If IsEmpty tab freeze
  • Scala mixin 到类实例

    Scala 中是否可以对类实例进行一些混合 例如 我有一些 MyClass 实例var x new MyClass我想在某些方法或特征上扩展它而不复制它 Edit 我正在寻找延伸的方法x当它被实例化之后 因此 例如在函数方法中 得到x作为参
  • Facebook 转化事件是否有类似于 Google Analytics 的回调功能?

    我在文档中找不到转化跟踪中是否有任何回调功能 https developers facebook com docs ads for websites tag api https developers facebook com docs ad
  • 使用“;”下载文件或文件名中的“#”会破坏文件名

    我有一个名为 AttachmentDownload aspx 的文件 并且 Page Load 方法内部有这样的代码 可以提供下载文件 除包含 的名称外 所有名称均可在 IE 中正常工作 或者 他们允许用户以 AttachmentDownl