我将允许上传任何文件扩展名,但我会将文件存储在 Web 服务器不直接提供服务的文件夹中。然后,我将创建一个从电子邮件链接到的 HTTP 处理程序,该处理程序将流式传输请求的文件。该文件可以通过原始文件名、系统生成的文件名或 ID 来请求。无论哪种方式,我都会清理参数以防止目录遍历攻击。
例如www.example.com/FileLink.ashx?FileName=Word.docx
这样,如果将来您希望将其他文件扩展名作为可执行文件类型提供服务,则无需担心,因为任何文件都是直接从文件系统的字节流提供的,并且永远不会通过 Web 服务器处理程序传递。
您还可以使用处理程序检查当前用户是否具有加载文件的正确权限。
还值得对每个文件进行病毒扫描,以防通讯作者上传(恶意或意外)会攻击订阅者计算机而不是服务器的文件。
还要确保将Content-Disposition 设置为attachment:
Content-Disposition: attachment; filename="filename.html"
这可以防止通过上传包含脚本标签的 HTML 或其他同源策略 bypasses using Flash or PDF files 来实现 XSS。这里的场景是一位时事通讯编辑破坏另一位时事通讯编辑的会话。还值得设置X-Content-Options: nosniff,它也可以防止这种情况。 xap 文件 (Silverlight) 也可以绕过同源策略,因此请检查文件名不能以 .xap 结尾以请求您的文件
例如www.example.com/FileLink.ashx/x.xap?FileName=Word.docx
您可以将 Silverlight 的内容类型设置列入黑名单,作为对这种特殊情况的额外保护。 Source here:
注意:.XAP 文件可以重命名为任何其他扩展名,但不能
不再加载跨域。 Silverlight 似乎找到了该文件
基于提供的 URL 的扩展名,如果不是 .XAP,则忽略它。
如果网站允许用户使用“;”,这仍然可以被利用。要么
在实际文件名后添加“/”以添加“.XAP”扩展名。
注意:当 Silverlight 跨域请求 .XAP 文件时,内容
类型必须是:application/x-silverlight-app。
我自己也验证了这些场景,它们是当前有效的攻击媒介。