ホームページ  >  記事  >  バックエンド開発  >  PHP で画像へのユーザー アクセスを制御するにはどうすればよいですか? PHP では画像のホットリンクが禁止されています。_PHP チュートリアル

PHP で画像へのユーザー アクセスを制御するにはどうすればよいですか? PHP では画像のホットリンクが禁止されています。_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:56:19787ブラウズ

PHP は画像へのユーザー アクセスをどのように制御しますか?PHP は画像のホットリンクを禁止します。

画像ディレクトリの 2 つのアクセス許可 (読み取りとディレクトリの参照) を削除します。
PHP ファイルを使用し、ファイル関数を直接使用して画像を読み取ります。このPHPファイルで権限制御を行います。
Apache 環境では、次のファイルをイメージ ディレクトリに追加するだけです。

ファイル名 .htaccess
ファイルの内容は以下の通りです

コードをコピーします コードは次のとおりです:
# ディレクトリ内の .htaccess ファイルがオーバーライドできるオプション。
# .htaccess で apache/conf/httpd.conf を編集してAllowOverride
#AllowOverride AuthConfig
# ディレクトリリストの表示を停止します
オプション - インデックス
# このサーバーから誰が情報を取得できるかを制御します。
注文を拒否、許可します
全員から拒否
ローカルホストから許可する

iss や nginx などの他の Web 環境も同様です。

リーリー

このコードは画像を読み取り、ブラウザに直接出力します。読み取りと出力の前に、ユーザーの権限が判断されます。
ここで PHP が画像を読み取るとき、読み取りパスを参照するのではなく、画像のコンテンツを読み取り、その後
を介して読み取ります。 Header(); gif png jpg などの画像の種類を入力します。 以下に画像の内容が出力されるのでfread()を使用します
実際、image.php?id=100 を見ると、この画像がブラウザに表示され、ソース ファイルを表示すると、画像へのパスではなく、文字化けした画像の内容が表示されます。
===========================================
QQスペースの暗号化フォトアルバムと同様に、パスワードを入力することでのみアクセスでき、ブラウザに直接入力した暗号化フォトアルバム内の写真アドレスにはアクセスできません。私の現在の考えは、画像のアドレスがphpファイルであり、phpを通じて権限が確認され、画像が読み取られて出力されるということですが、この方法以外にもっと簡単で効率的な方法はあるのでしょうか?たとえば、一時的な閲覧アドレスを生成し、nginx のアンチホットリンク プラグインを使用します。
これを実現するには、ngx_http_auth_basic_module を使用します。

設定ファイルを変更する

コードをコピーします コードは次のとおりです:
場所 / {
root /usr/local/nginx/html;
auth_basic 「認証」;
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
インデックスindex.phpインデックス.htm;
}


auth_basic 「Auth」の Auth はポップアップボックスのタイトルです (ユーザー名とパスワードを入力します)
auth_basic_user_file の /usr/local/nginx/conf/htpasswd /usr/local/nginx/conf/htpasswd はパスワードを保存するファイルです

;


PHP は画像のホットリンクを禁止しています
1. 画像へのリンクが許可されているホスト ドメイン名が www.test.com
であると仮定します。 2. httpd.confを変更します

コードをコピーします コードは次のとおりです:
SetEnvIfNoCase リファラー「^http://www.test.com/」local_ref=1
<ファイルマッチ「.(gif|jpg)」>
注文の許可、拒否
env=local_ref から許可する

このシンプルなアプリケーションは、写真のホットリンクの問題を解決できるだけでなく、わずかな変更を加えることでファイルのホットリンクの問題を防ぐこともできます。
上記の方法で指定以外のホストから画像をリンクした場合、画像は表示されませんが、「ホットリンク禁止」の画像を表示したい場合は、mod_rewriteを使用することで実現できます。
まず、Apache をインストールするときに、–enable-rewrite パラメータを追加して mod_rewrite モジュールをロードします。
「ホットリンクなし」画像が abc.gif であると仮定すると、httpd.conf で次のように設定できます:

コードをコピーします コードは次のとおりです:
リライトエンジンオン
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?test.com /.*$ [NC]
RewriteRule .(gif|jpg)$ http://www.test.com/abc.gif [R,L]

ホストの写真が盗まれた場合、「ホットリンクは禁止されています」と書かれた「abc.gif」写真のみが表示されます。

www.bkjia.com本当http://www.bkjia.com/PHPjc/1113693.html技術記事 PHP は画像へのユーザー アクセスをどのように制御しますか? PHP は画像のホットリンクを禁止し、http アクセスを禁止するように画像ディレクトリを設定します (画像ディレクトリの 2 つのアクセス許可 (読み取りとディレクトリの参照) を削除します)。 使用してください...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。