![](/img/trans.png)
[英]need to use www.mydomain.com/filename/ instead of www.mydomain.com/file.php?id=1
[英]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.