我正在开发一种工具,最终允许用户从网上购买和下载文件。我想知道如何安全/安全地托管可下载文件,以便未经授权的用户无需先购买即可下载文件。
用户可以从网站购买该文件,然后只要他们需要就可以访问可下载文件。
这是一个两部分问题:
对于第一个问题,我猜我将文件存储在散列目录名中,以便猜测几乎不可能? 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
答案 0 :(得分:-1)
如果......
1)将文件存储在Apache无法直接访问的目录中。
2)在“购买文件”视图中,创建一个特定于用户的符号链接(使用您的哈希),该符号链接指向实际文件并重定向以允许Apache通过符号链接提供文件
3)运行一个cron作业,在创建x小时后删除符号链接。