2010-08-03 71 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