[英]htaccess Authentication with PHP
在我正在使用的當前網站上,我有一個文件目錄供用戶下載,如果有一些除隱蔽性之外的安全方法,那將非常好;)
我想知道是否有任何方法可以通過PHP向htaccess提供登錄信息,就像用戶正在輸入登錄信息一樣。
另外,如果有人知道使用PHP保護用戶下載的更好方法,那也是可以接受的。 我所有的谷歌搜索都顯示“僅使用htaccess”並沒有太大幫助,因為從不懂用戶的角度來看,他們每次使用該網站都必須登錄兩次。
我最想用PHP做到的最好猜測是將文件存儲在Web根上方,然后將它們臨時復制到Web可訪問的文件夾中,但這似乎效率很低,我想不出辦法在下載完成后將其刪除。
注意:我不擁有運行該服務器的服務器,也沒有通過ssh訪問它的服務器。
如果文件不是太大(Gb),則可以始終使用readfile進行文件下載。 在這種模式下,您可以先檢查用戶的身份驗證,然后向用戶輸出文件內容是否正常,否則將其發送到登錄頁面。
使用這種方法,您可以將文件放在受保護的目錄(帶有.htaccess)中,這樣可以確保沒有經過身份驗證的人都不能訪問它們。
我想我可以將它們存儲在Web根目錄之外的文件夾中,也可以存儲在受.htaccess保護的文件夾中,然后使用php腳本檢查用戶是否已登錄並允許下載要求的文件。 如果是,那么只需將文件傳遞給用戶。
來自php.net的鏈接頁面的示例:
Example#1對二進制文件使用fpassthru()
<?php // open the file in a binary mode $name = './img/ok.png'; $fp = fopen($name, 'rb'); // send the right headers header("Content-Type: image/png"); header("Content-Length: " . filesize($name)); // dump the picture and stop the script fpassthru($fp); exit; ?>
有人對必須報告正確的內容類型發表了評論,這是事實。 通常,以我自己的經驗,我已經知道了,或者可以很容易地使用文件擴展名。 否則,您總是可以嘗試看看finfo_file 。 在該頁面上,還有一些關於您可以做什么的評論,尤其是對於圖像。
您應該使用php腳本來控制訪問。 使用.htaccess在webroot外部或webroot內部創建目錄,您可以在其中找到下載文件。
異地的webroot更好。
您必須確保如果文件位於其中,則沒有人可以訪問這些文件。
然后從梨類庫中獲取。 類http_download。
使用此類有很多優點。
您不應使用readfile或任何轉發文件指針,因為您必須自己設置標頭,並且不支持http“ range”。
對於訪問限制,您可以使用會話管理器,密碼,框架,論壇等。
梨-http_download http://pear.php.net/package/HTTP_Download
您需要復制url,因為SO會將其編碼為url編碼的字符串(這是正確的),但是PEAR主頁並不喜歡這樣。
為什么要重新發明輪子? 看一下File Thingy ,它很容易安裝和定制。 如果沒有其他問題,您可以研究資料以了解如何執行身份驗證步驟。
我認為第一種選擇更好。
使用X-SendFile
! 有針對Apache,Lighty和Nginx的擴展,因此很可能為您的Web服務器提供一個擴展。
一旦安裝了擴展程序,就可以使用您的PHP腳本對用戶進行身份驗證,然后添加標頭:
header('X-SendFile','/path/to/file');
PHP腳本完成后,它將觸發Web服務器為您流式傳輸文件。 如果您將PHP與FastCGI一起使用,則這特別有效,因為它可以釋放PHP進程的其他工作。
翻轉
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.