2011-06-23 72 views
0

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

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

这是一个问题的两个部分:

  1. 我该如何去确保支付的文件不被未授权的人下载?和
  2. 我应该如何处理身份验证,如果用户检查可以下载付费文件?

对于第一个问题,我猜测我将文件存储在哈希目录名称中,以便猜测几乎不可能? 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

该怎么办......

1)存储在某个目录不是直接由Apache的访问的文件。

2)在你的“购买一个文件”视图中创建一个用户特定的符号链接(使用散列)指向实际的文件并重定向到允许Apache以通过符号链接

3提供服务​​的文件)运行cron作业,在创建x个小时后删除符号链接。

+0

我不使用Apache,但NGINX,上述仍然适用? –

+0

另外,似乎像符号链接是一个有点哈克...有更多的“标准”的方法呢? –