安全地存储可下载的文件

时间:2011-06-23 18:30:17

标签: django file file-upload data-storage

我正在开发一种工具,最终允许用户从网上购买和下载文件。我想知道如何安全/安全地托管可下载文件,以便未经授权的用户无需先购买即可下载文件。

用户可以从网站购买该文件,然后只要他们需要就可以访问可下载文件。

这是一个两部分问题:

  1. 如何确保未经授权的人员不会下载付费文件?
  2. 如何处理用于检查用户是否可以下载付费文件的身份验证?
  3. 对于第一个问题,我猜我将文件存储在散列目录名中,以便猜测几乎不可能? S3服务器在这里是一个很好的解决方案吗?在这方面我需要注意哪些问题?

    对于第二个问题,我猜我可以在数据库中创建一个表,用于存储将用户与文件关联的购买,如下所示:

    purchases table
       -> id
       -> hash (unique purchase identifier)
       -> user (foreign key)
       -> file (foreign key)
       -> ...other stuff here like timestamp, etc...
    

    ...然后使用应用程序检查用户是否进行了购买,因此下载的URL将是:

    http://www.example.com/something/download/sd9f7u23ihosd8087603/

    ...然后搜索具有散列sd9f7u23ihosd8087603的记录并确保它存在并且它与当前用户相关联。然后从那里,将它们引导到文件系统上的文件......

    这是一个好方法吗?有优秀的解决方案吗?我确定我在这里遗漏了细节......


    该应用程序是用Django编写的,如果这与问题有关。另一个注意事项是网站上将提供免费和付费下载。

    注意:这个问题类似于我的问题:Having Django serve downloadable files

1 个答案:

答案 0 :(得分:-1)

如果......

1)将文件存储在Apache无法直接访问的目录中。

2)在“购买文件”视图中,创建一个特定于用户的符号链接(使用您的哈希),该符号链接指向实际文件并重定向以允许Apache通过符号链接提供文件

3)运行一个cron作业,在创建x小时后删除符号链接。