标签: protected-resource

Django - 了解X-Sendfile

我一直在研究使用Django进行访问控制的文件下载.我的目标是完全阻止对文件的访问,除非由特定用户访问.我已经读过,当使用Django时,X-Sendfile是实现这一目标的首选方法之一(基于其他SO问题等).我对使用Xang Sendfile和Django的基本理解是:

  1. 用户请求URI以获取受保护的文件
  2. Django应用程序根据URL决定返回哪个文件,并检查用户权限等.
  3. Django应用程序返回HTTP响应,并将"X-Sendfile"标头设置为服务器的文件路径
  4. Web服务器找到该文件并将其返回给请求者(我假设Web服务器也沿途除去了'X-Sendfile'标题)

与直接从Django中删除文件相比,X-Sendfile似乎是一种更有效的方法来实现受保护的下载(因为我可以依赖Nginx来提供文件,而不是Django),但是给我留下两个问题:

  1. 我对X-Sendfile的解释至少是抽象的正确吗?
  2. 它是否真的安全,假设我没有提供正常的前端HTTP访问(例如http://www.example.com/downloads/secret-file.jpg)到文件存储的目录(即,不要不要把它保存在我的public_html目录中)?或者,精通技术的用户是否可以检查标题等,并以反向工程方式访问文件(然后分发)?
  3. 它在性能上是否真的有很大差异?我是否会通过直接从Django提供8b块150Mb文件的下载来使我的应用程序服务器陷入困境,或者这种类型是无问题的?我问的原因是因为如果两个版本接近相等,Django版本会更好,因为我有能力用Python做事,比如记录完成的下载次数,下载的带宽等.

提前致谢.

python django x-sendfile download protected-resource

30
推荐指数
1
解决办法
8765
查看次数

在Ada中中止使用重新排列的受保护对象的进程

我的程序遇到了一些麻烦.

我有一个进程调用一个函数(Take_Job),它应该保持阻塞状态,直到一个时间(MINIMUM_WAIT)通过.如果不是这样,将出现通知这种情况的消息.

for Printer_Id in Type_Printer_Id loop
   select
      delay MINIMUM_WAIT
      Pragma_Assert (True, "");
   then abort
      Take_Job (Controller,
                     Printer_Id,
                     Max_Tonner,
                     Job,
                     Change_Tonner);
      Pragma_Assert
        (False,
           "Testing of Take_Job hasn't been successful. It should have remained blocked.");
   end select;
end loop;
Run Code Online (Sandbox Code Playgroud)

函数Take_Job调用受保护对象中的条目:

procedure Take_Job (R                 : in out Controller_Type;
                         Printer      : in     Type_Printer_Id;
                         Siz          : in     Typo_Volume;
                         Job          :    out Typo_Job;
                         Excep_Tonner :    out Boolean) is
begin
   R.Take_Job(Printer, Siz, Job, Excep_Tonner);
end Take_Job;
Run Code Online (Sandbox Code Playgroud)

其中"R"是受保护对象.

以下代码是受保护对象的条目.实际上,"when"条件为True,因为我需要使用条目的参数检查一些内容.由于Ada不允许我这样做,我复制受保护对象内的参数并调用"延迟条目",然后在"延迟条目"中,我将确保在继续之前满足条件.

entry Take_Job(Printer_Id: in Type_Printer_Id; Remaining: in Type_Volume; Job: …
Run Code Online (Sandbox Code Playgroud)

concurrency ada task protected-resource

4
推荐指数
1
解决办法
132
查看次数