4

ユーザーがアップロードしたファイルを次のようなフォルダー構造に保存するWebアプリを実行します。

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

これで、003.jpgと004.jpgのURLを推測するのは非常に簡単です...

したがって、ユーザーアクセスをwww.mydomain.com/app/のみに制限し、それ以外には制限したくありません。ローカルホスト上の私の.phpページのみがトップシークレットPDFにアクセスできるようにする必要があります。

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

たぶん、.htaccessまたはフォルダのアクセス許可を介した解決策があります。「headers」と「readfile」を使用して問題を修正できることはわかっていますが、それでは少しリファクタリングが発生します。

よろしくお願いします、マティアス

4

5 に答える 5

3

これはあなたが探しているものかもしれません:

これを含む.htaccessファイルを、ユーザーがアクセスできないようにするフォルダーのルートに配置します。

order deny,allow
allow from 127.0.0.1
deny from all

これにより、Webサーバー上のWebブラウザーからURLにアクセスできますが、他のコンピューターからURLにアクセスしようとすると、403エラーが発生します。

于 2012-09-18T18:49:43.367 に答える
1

いくつかの説明:あなたがするとき

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

PHPアクセスは重要ではありません(実際、PHPがファイルにアクセスできない場合でも機能します!)。最初のステップは、画像をリクエストするのはブラウザであることを認識することです。したがって、ブラウザがアクセスできる場合、ユーザーは画像の名前を推測することで他の画像にアクセスできます。これは、PHPからのreadfileを使用して画像を提供する場合でも機能します。だから私はあなたが問題を間違った方法で解決しようとしていると書いたのです。

できることは、画像名(またはPHPスクリプトに送信するリクエスト変数)を難読化することです。例:ソルト+MD5を使用します。そうすれば、ユーザーは名前を推測できなくなります。

于 2012-09-19T01:08:24.310 に答える
0

スクリプトでreadfile()を使用して、許可されている場合は画像をユーザーに表示します。.htaccess/chmodedを介して実際のファイルへのアクセスを正しくブロックします

于 2012-09-19T01:11:04.100 に答える
0

.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]
于 2012-09-18T15:09:11.840 に答える
0

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) ...-彼が管理者である場合、ユーザーはまだこのコードを見ることができます->彼は他のファイル名も推測することができます...

リンクは次のとおりです:http ://www.sweeting.org/mark/blog/2005/07/12/base64-encoded-images-embedded-in-html

于 2012-09-18T15:14:55.700 に答える