Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 安全存储可下载文件_Django_File_File Upload_Data Storage - Fatal编程技术网

Django 安全存储可下载文件

Django 安全存储可下载文件,django,file,file-upload,data-storage,Django,File,File Upload,Data Storage,我正在开发一种工具,它最终将允许用户从网上购买和下载文件。我想知道如何安全地托管可下载文件,以便未经授权的用户在未购买文件之前无法下载文件 用户可以从网站上购买文件,然后根据需要随时访问可下载的文件 这是一个由两部分组成的问题: 我如何确保付费文件不会被未经授权的人下载 我应该如何处理身份验证以检查用户是否可以下载付费文件 对于第一个问题,我猜测我将文件存储在一个哈希目录名中,这样猜测几乎不可能?S3服务器在这里是一个好的解决方案吗?在这方面,我需要注意哪些问题 对于第二个问题,我猜我可以在数据

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

用户可以从网站上购买文件,然后根据需要随时访问可下载的文件

这是一个由两部分组成的问题:

  • 我如何确保付费文件不会被未经授权的人下载
  • 我应该如何处理身份验证以检查用户是否可以下载付费文件
  • 对于第一个问题,我猜测我将文件存储在一个哈希目录名中,这样猜测几乎不可能?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编写的,如果这与问题有关的话。另一个注意事项是,该网站将提供免费和付费下载

    注意:这个问题与我的问题类似:

    如果

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

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


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

    我不使用Apache,但使用NGINX,上面的方法是否仍然适用?而且,符号链接似乎有点不太成熟。。。有没有更“标准”的方法?