簡體   English   中英

使用PHP進行htaccess身份驗證

[英]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。

使用此類有很多優點。

  • 范圍(部分下載和恢復)
  • 基本緩存功能
  • 基本節流機制
  • 動態gzip壓縮
  • 通過Archive_Tar和Archive_Zip即時交付生成的檔案
  • 發送PgSQL LOB,而無需在發送之前先讀取所有數據

您不應使用readfile或任何轉發文件指針,因為您必須自己設置標頭,並且不支持http“ range”。

對於訪問限制,您可以使用會話管理器,密碼,框架,論壇等。

梨-http_download http://pear.php.net/package/HTTP_Download

您需要復制url,因為SO會將其編碼為url編碼的字符串(這是正確的),但是PEAR主頁並不喜歡這樣。

為什么要重新發明輪子? 看一下File Thingy ,它很容易安裝和定制。 如果沒有其他問題,您可以研究資料以了解如何執行身份驗證步驟。

  1. 我認為,您可以使用MySQL存儲上載的文件,而不是將它們存儲在一個文件中,更好,更安全。 僅以Google“ MySQL上傳php”為例。
  2. 每次用戶訪問該文件夾時,您都可以使用PHP腳本從用戶表中創建htaccess文件,這很麻煩。

我認為第一種選擇更好。

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM