【问题标题】:Serving an exe to Firefox from an aspx. Firefox downloads it as "Content". Incorrect filename and no extension从 aspx 向 Firefox 提供 exe。 Firefox 将其下载为“内容”。文件名不正确且没有扩展名
【发布时间】:2011-03-28 11:37:54
【问题描述】:

我正在尝试从一个 aspx 页面向 Firefox 提供一个 exe。 aspx 页面处理标题,页面由我们的 Flex GUI 启动。 Flex 正确启动所有浏览器(包括 Firefox)的链接,所以我确定这不是问题。

我遇到的问题是,当我尝试从 Firefox 中下载文件时,FF 可以正常下载文件,但将其命名为“内容”。它没有扩展名,文件名不正确。所有其他浏览器都使用我在 aspx 页面中指定的文件名下载它,并且它们都具有 .exe 扩展名。我应该注意,如果我将“Content”文件重命名为“Content.exe”,它会正常运行。

下面是我在我的 aspx 页面中使用的代码 -

   protected void Page_Load(object sender, EventArgs e) {
        string fileName = Request.QueryString["file"];
        System.IO.FileInfo fileInfo = new System.IO.FileInfo(Server.MapPath(fileName));

        Response.Clear();
        if ( fileName.EndsWith(".exe") ) {
            Response.ContentType = "application/exe";
        }
        else {
            Response.ContentType = "application/octet-stream";
        }
        Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
        Response.AddHeader("Content-Length", fileInfo.Length.ToString());
        Response.WriteFile(fileInfo.FullName);
        Response.Flush();
    }

关于为什么这在 Firefox 中不能正常工作的任何想法和/或建议?

【问题讨论】:

  • 这种情况下可执行文件的实际名称是什么?
  • 文件名为“SwfTest.exe”

标签: c# .net asp.net firefox


【解决方案1】:

我刚刚在一个简单的 asp.net 网站中运行了您提到的确切代码,没有 Flex GUI 部分,它在我的 Firefox 上运行良好,我得到了带扩展名的文件名。

我使用的是 Firefox 版本 3.6.16。

您可以尝试以下几件事:

  1. 尝试在没有 Flex GUI 部分的情况下运行相同的代码
  2. 如果仍然无法正常工作,请检查您的 Firefox 版本
  3. 按照 Jon 的建议,使用 Fiddler 并观察响应标头中是否有问题

还有一点,这可能只是为了测试目的,因为允许以这种方式下载文件可能会带来安全威胁,因为即使从 Flex GUI 调用 url,人们也可以使用 fiddler 或 wireshark 监控流量,然后利用它下载他们想要的任何文件。例如,他们可以下载 web.config 并查看连接字符串,或者他们可以下载代码。

您应该限制用户只能从一个位置下载文件,并且只允许几个允许的扩展名。

【讨论】:

  • +1 表示警告。我很清楚这不是做到这一点的“正确”方式。对我来说不幸的是,高层不想花时间做正确的事。显然,我们有“不会那样做”的“愚蠢的用户”。这是一场我已经战斗了一年的战斗(不仅仅是在这个安全漏洞上,其他方面也是如此)。
【解决方案2】:

您无需自己添加内容长度,因为Response.WriteFile 会在适当时添加。生成的重复标​​题不正确。

我也会避免在最后刷新,首先刷新只有在长时间下载的中途发生时才有用;仅在最后完成,您会得到分块编码的缺点,而没有任何优点。这也可能会干扰您发送的内容长度标头。

最后,没有注册的内容类型“application/exe”,“application/octet-stream”应该用于可执行文件。也许是因为 Firefox 认为 .exe 文件是“错误的”,所以它没有使用该扩展名。

如果上述方法都不能解决问题,我建议您使用通过 Fiddler 或类似工具看到的从浏览器发送的标题更新您的问题,因为这可能会帮助某人找到答案(或者您自己)。

【讨论】:

  • 感谢您的回复。我将尝试其中的几个建议。我知道 application/exe 不是有效的内容类型,这就是我使用它的原因。我们有一些客户说他们的 IE 正在尝试启动文件而不是下载它。给它一个未知类型有助于确保(所以我假设?)他们会得到保存对话框。
猜你喜欢
  • 2011-12-24
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 2018-10-19
  • 2012-08-14
相关资源
最近更新 更多