簡體   English   中英

只允許PHP腳本打開網址,如www.mydomain.com/topsecret/1/001.jpg

[英]only allow PHP scripts to open urls like www.mydomain.com/topsecret/1/001.jpg

我運行一個Web應用程序,將用戶上傳的文件存儲在以下文件夾結構中:

www.mydomain.com/uploads/topsecret/1/001.jpg
www.mydomain.com/uploads/topsecret/1/002.jpg

現在,很容易猜到003.jpg和004.jpg的網址......

因此,我想限制用戶只能訪問www.mydomain.com/app/,而不是其他任何內容。 只允許我在localhost上的.php頁面獲取最高機密的pdf,比如

show.php:
<? if ($isAdmin) {
    echo "<img src='http://www.mydomain.com/uploads/topsecret/1/001.jpg'/>";
 } ?>

也許通過.htaccess或通過文件夾權限有一個解決方案。 我知道我可以通過“headers”和“readfile”修復問題,但這會導致現在進行一些重構。

先謝謝你,馬蒂亞斯

這可能是您正在尋找的:

將包含此文件的.htaccess文件放在您不希望用戶能夠訪問的文件夾的根目錄中:

order deny,allow
allow from 127.0.0.1
deny from all

這仍然允許從Web服務器上的Web瀏覽器訪問URL,但嘗試從任何其他計算機訪問它們將導致403錯誤。

一些澄清:當你做一個

echo "<img src='....'>";

PHP訪問無關緊要(事實上,即使PHP無法訪問該文件,它也能正常工作!)。 第一步是要意識到,它是瀏覽器發出圖像請求。 因此,如果瀏覽器可以訪問它,則用戶可以通過猜測圖像的名稱來訪問其他圖像。 如果您使用PHP的readfile提供圖像,這甚至可以工作。 這就是為什么我寫道你試圖以錯誤的方式解決問題。

可以做的是模糊圖像名稱(或發送到PHP腳本的請求變量)。 例如:使用鹽+ MD5。 這樣用戶無法猜出名字。

在.htaccess中使用:

<FilesMatch "\.(engine|inc|jpg|po|sh|.*sql|theme|tpl(\.php)?|xtmpl|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$">
  Order allow,deny
</FilesMatch>

這將保護文件免受直接訪問,然后例如設置默認的index.php文件來處理$ _GET請求:

 RewriteBase /

  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

您可以嵌入在base64中編碼的圖像,如下所示:

<img src="data:image/gif;base64,R0lGODlhUAAPAKIAAAsLav///88PD9WqsYmApmZmZtZfYmdakyH5BAQUAP8ALAAAAABQAA8AAAPb
WLrc/jDKSVe4OOvNu/9gqARDSRBHegyGMahqO4R0bQcjIQ8E4BMCQc930JluyGRmdAAcdiigMLVr
ApTYWy5FKM1IQe+Mp+L4rphz+qIOBAUYeCY4p2tGrJZeH9y79mZsawFoaIRxF3JyiYxuHiMGb5KT
kpFvZj4ZbYeCiXaOiKBwnxh4fnt9e3ktgZyHhrChinONs3cFAShFF2JhvCZlG5uchYNun5eedRxM
AF15XEFRXgZWWdciuM8GCmdSQ84lLQfY5R14wDB5Lyon4ubwS7jx9NcV9/j5+g4JADs=
" alt="British Blog Directory" width="80" height="15" />

你希望用<? if ($isAdmin) ... <? if ($isAdmin) ... - 如果用戶是管理員,用戶仍然可以看到這段代碼 - >他也可以猜到其他文件名...

這是一個鏈接: http//www.sweeting.org/mark/blog/2005/07/12/base64-encoded-images-embedded-in-html

在腳本中使用readfile()以向用戶顯示允許的圖像。 並通過.htaccess / chmoded正確阻止對實際文件的訪問

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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