我目前正在开发一个基于HTTP GET请求返回文件的WCF服务。该服务的主要概念如下:
public Stream MyGetMethod()
{
// Fetch the file
byte[] myFile = FetchMyFile();
// Set the name of the file using Content-Disposition
WebOperationContext.Current.OutgoingResponse
.Headers.Add("Content-Disposition", "attachment; filename=MyFile");
// Return the file
return new MemoryStream(myFile);
}
我使用Content-Disposition
标头告诉浏览器它应该命名文件MyFile
并且它应该显示一个SaveAs对话框(attachment
部分)。
虽然这有效,但我一直在阅读有关Content-Disposition
的一些不好的事情。
RFC2616州:
RFC 1806 [35],从中导出了HTTP中经常实现的Content-Disposition(请参阅第19.5.1节)标头,它有许多非常严重的安全考虑因素。 Content-Disposition不是HTTP标准的一部分,但由于它已被广泛实施,我们正在记录其对实现者的使用和风险。有关详细信息,请参阅RFC 2183 [49](更新RFC 1806)。
从RFC2183我得到:
由于此备忘录为发件人提供了建议文件名的方法,因此 接收MUA必须注意发件人的建议文件名
不代表危险。以UNIX为例,有些危害 将是:
- 创建启动文件(例如," .login")。
- 创建或覆盖系统文件(例如" / etc / passwd")。
- 覆盖任何现有文件。
- 将可执行文件放入任何命令搜索路径 (例如,"〜/ bin / more")。
将文件发送到管道(例如" | sh")。
通常,接收MUA不应命名或放置文件 这样它将在没有用户的情况下被解释或执行 明确启动行动。
我看到这里有一些严重的安全方面,但我不太确定这是否会阻止我使用它,就像上面的WCF服务一样?
正如我所看到的,我认为它应该没问题,因为所有主流浏览器都理解标题,虽然上面代码段中的代码很简单,但我看不出它是如何成为安全威胁的?如果我错了,请纠正我。
感谢。
答案 0 :(得分:-1)
安全使用Content-Disposition
,为了更加安全,不允许用户提供文件名,或者自己添加一些随机的唯一名称前缀或sufix或文件扩展名。