我正在开发一个工具,该工具最终将允许用户从网上购买和下载文件。我想知道如何安全地托管可下载的文件,这样未经授权的用户就无法在不首先购买文件的情况下下载这些文件。
用户可以从网站上购买该文件,然后根据需要访问可下载的文件。
这是一个由两部分组成的问题:
- 我该如何确保付费文件不会被未经授权的人下载?,以及
- 我应该如何处理验证以检查用户是否可以下载付费文件
对于第一个问题,我猜测我将文件存储在哈希目录名中,这样猜测几乎是不可能的?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/
其随后将搜索具有散列CCD_ 2的记录并确保其存在并且与当前用户相关联。然后从那里,将它们指向文件系统上的文件。。。
这是个好办法吗?有更好的解决方案吗?我确信我遗漏了这里的细节。。。
应用程序是用Django编写的,如果这与问题有关的话。另一个注意事项是,该网站将提供免费和付费下载。
注意:这个问题类似于我所问的:让Django提供可下载的文件
如果…
1) 将文件存储在Apache无法直接访问的目录中。
2) 在您的"购买文件"视图中,创建一个用户特定的符号链接(使用哈希),指向实际文件并重定向,以允许Apache通过符号链接提供文件
3) 运行一个cron作业,在创建x小时后删除符号链接。