2010-08-03 147 views
0

我正在开发一个需要密码保护下载的项目,但我并不确定如何实现该功能。如果目标文件具有特定的扩展名(.exe,.mp3,.mp4等),我想提示用户输入用户名和密码。对此有何想法?阻止用户从Python下载文件?

我在Windows XP上使用Python 26。

+2

“密码保护下载”从什么?一个FTP服务器?完成 - FTP已经做到了。你在说什么类型的“下载”? – 2010-08-03 03:01:38

+0

我在说一般的下载!当用户打开浏览器时,在链接上下载文件,我想提示输入密码。从何而来?一切! – 2010-08-03 03:09:30

+5

没有“一般下载”。如果你正在谈论一个“浏览器”,那么你可能真的在从一个网站下载**,这意味着来自基于网络的应用**。请更新您的问题,说“从网络服务器**下载**”。 – 2010-08-03 03:10:49

回答

1

使用HTTP的basic authentication(在我从客户端引用URL中):

  1. 每当一个“敏感”页面或文件的要求,并没有授权头的请求的一部分 (或者它是无效的,见下文),一个头WWW-Authenticate: Basic realm=XXXX返回401个状态码代替, (XXXX为URL的哈希, 例如使用MD5或SHA-1,以使每个文件时,它基本上是唯一的)
  2. 用户将需要在他的浏览器中输入用户名和密码,这将是 送他们回你与那个URL,即显示 简单的算法实现服务器:

    进口的base64 base64string = base64.encodestring( '%S:%s' 的%(用户名,密码)) [:-1] req.add_header(“授权”,“基本%的”%base64string)

  3. 当授权报头存在于该请求,'Basic '后解码的base64串 它提出,并检查它有你想要的username:password

当然,您可以使用更复杂的身份验证,但这可能会让您开始,除非用户的连接可以(或者您怀疑)被邪恶的第三方“嗅探”(在这种情况下,您仍然希望使用HTTPS,这样基本身份验证会再次变为OK ;-)。

+1

“解码它呈现的base53字符串”你的意思是base64字符串? – Parthan 2010-08-03 03:24:21

+0

@Techno,哎呀,是的,从快速打字错误视差,现在正在修复,tx! - – 2010-08-03 04:04:50

+0

只是试图证明你不是一个机器人,嗯:) – 2010-08-03 05:18:21

2

这最好在Web服务器级别实现。

如果您使用的是Apache,可以通过将需要保护的文件放置在需要用户身份验证的htaccess文件的目录中来完成。

然后,在Python脚本中执行HTTP Basic Auth以下载文件。确保使用SSL连接;基本身份验证通过电缆以明文方式发送用户密码。

+0

根据我下面的回答,如果没有不断变化的领域的技巧,用户将只需输入一次凭据,然后他们的浏览器会记住并自动重新发送它们 - 这看起来与OP的规格不匹配。 (我不知道足够的Apache黑魔法是否能够轻松实现不断变化的领域 - 如果是这样,无论如何,对于serverfault.com来说似乎都是一个问题;-)。 – 2010-08-03 03:08:34