【问题标题】:Prevent A User From Downloading Files from Python?防止用户从 Python 下载文件?
【发布时间】:2011-03-24 12:38:29
【问题描述】:

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

我在 Windows XP 上使用 Python 26。

【问题讨论】:

  • “密码保护下载”来自什么? FTP服务器?完成——FTP 已经做到了。你说的是哪种“下载”?
  • 我说的是一般下载!当用户打开浏览器,点击下载文件的链接时,我想提示输入密码。从何而来?一切!
  • 没有“一般下载”。如果您说的是“浏览器”,那么您可能真的是在考虑从网站下载,这意味着从基于网络的应用程序。请将您的问题更新为“从网络服务器下载”。
  • Bit Torrent 怎么样? SSH?颠覆?所有这些都属于“一般下载”,但祝你好运,尝试用相同的方法阻止它们。请注意,您得到的两个答案告诉您如何使用密码保护通过 HTTP(或 HTTPS)完成的下载。
  • 如果您控制文件所在的服务器,您可以控制下载文件的方式,包括身份验证选项。没有任何保护“一般下载”的方法

标签: python windows passwords download


【解决方案1】:

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

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

然后,在您的 Python 脚本中实现 HTTP Basic Auth 以下载文件。确保使用 SSL 连接;基本身份验证通过网络以明文形式发送用户密码。

【讨论】:

  • 如果按照我下面的回答,如果没有不断变化的领域的技巧,用户只需输入一次他们的凭据,然后他们的浏览器就会记住并自动重新发送它们——这似乎没有匹配OP的规格。 (我不知道足够多的 Apache 黑魔法来知道是否可以轻松地在那里实现不断变化的领域 - 如果是这样,无论如何,对于 serverfault.com 来说似乎是一个问题;-)。
【解决方案2】:

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

  1. 每当请求“敏感”页面或文件时,并且没有授权标头是一部分 请求(或无效,见下文),返回 401 状态码, 带有标头 WWW-Authenticate: Basic realm=XXXX(其中 XXXX 是 URL 的哈希值, 例如使用 MD5 或 SHA1,使其在每个文件中本质上是唯一的)
  2. 然后用户需要在他的浏览器中输入用户名和密码,这将 使用所示的简单算法将它们发送回您正在实施的服务器 在该 URL 处,即:

    导入base64 base64string = base64.encodestring('%s:%s' % (username, password))[:-1] req.add_header("授权", "基本 %s" % base64string)

  3. 当请求中存在 Authorization 标头时,解码 base64 字符串 它出现在'Basic ' 之后,并检查它是否有你想要的username:password

当然,您可以使用更复杂的身份验证,但这可能会让您入门,除非用户的连接可以(或者您怀疑)被邪恶的第三方“嗅探”(在这种情况下,您无论如何都需要使用 HTTPS ,这样基本身份验证就会再次正常;-)。

【讨论】:

  • “解码它呈现的base53字符串”你的意思是base64字符串吗?
  • @Techno,哎呀,是的,快速打字时出现了一个错字错视差,现在修复,tx!-)
  • 只是想证明你不是机器人,嗯:)
  • @gnibbler,该死,你发现了我新的微妙掩蔽策略,我必须重新设置并尝试一个新策略!
猜你喜欢
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2014-02-04
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
相关资源
最近更新 更多