如何在用户购买之前“锁定”文件?

时间:2011-02-23 09:35:04

标签: asp.net security iis-7 file-upload asp.net-3.5

我正在建立一个网站,用户可以在其中购买可以从用户登录区域下载的MP3文件。

在我开发的先前应用程序中,我将允许管理员上传文件,它将存储在“/Uploads/MP3s/filename.mp3”下。但是,我需要使其安全,以便用户在购买这些文件之前无法访问这些文件。

这样做的最佳,最安全的方法是什么?

2 个答案:

答案 0 :(得分:5)

您应该有一个数据库,用于存储哪个用户购买了哪个mp3。上传的mp3不应存储在可公开访问的文件夹中。将它们存储在另一个文件夹中,然后存储在httpfolder中,但请确保您的iis可以访问此文件夹。这样,没有人可以猜测文件的路径,因为它不在http-root下。

使用下载页面检查下载权限,然后仅使用Response.WriteFile(filename)和正确的mime类型等将mp3发送给用户。

Protected Sub ServeMP3(ByVal f As FileInfo)
    Response.Clear()
    Response.ContentType = "audio/mpeg3"
    Response.AddHeader("content-disposition", "inline; filename=" & f.Name) 
    Response.WriteFile(f.FullName)
    Response.End()
End Sub

而不是“内联”(流和播放),您可以使用“附件”强制下载文件

答案 1 :(得分:3)

将它们隐藏在可以检查请求有效性的HTTP处理程序,模块,Web服务或页面后面,然后流式传输文件或显示错误/重定向到购买页面。

这样做的好处是可以完全抽象出文件的真实路径......通过默默无闻的安全性(: