ホームページ >バックエンド開発 >PHPチュートリアル >PHPで画像へのユーザーアクセスを制御する方法

PHPで画像へのユーザーアクセスを制御する方法

*文
*文オリジナル
2017-12-29 17:55:124009ブラウズ

この記事では主に、PHP が画像へのユーザー アクセスを制御する方法を紹介します。主に、必要な友達が画像を参照できないようにするために使用されます。お役に立てれば幸いです。

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

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

# options the .htaccess files in directories can override.
# Edit apache/conf/httpd.conf to AllowOverride in .htaccess
# AllowOverride AuthConfig
# Stop the directory list from being shown
Options -Indexes
# Controls who can get stuff from this server.
Order Deny,Allow
Deny from all
Allow from localhost

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

class imgdata{
public $imgsrc;
public $imgdata;
public $imgform;
public function getdir($source){
$this->imgsrc = $source;
}
public function img2data(){
$this->_imgfrom($this->imgsrc);
return $this->imgdata=fread(fopen($this->imgsrc,'rb'),filesize($this->imgsrc));
}
public function data2img(){
header(“content-type:$this->imgform”);
echo $this->imgdata;
//echo $this->imgform;
//imagecreatefromstring($this->imgdata);
}
public function _imgfrom($imgsrc){
$info=getimagesize($imgsrc);
//var_dump($info);
return $this->imgform = $info['mime'];
}
}
$n = new imgdata;
$n -> getdir(“1.jpg”); //图片路径,一般存储在数据库里,用户无法获取真实路径,可根据图片ID来获取
$n -> img2data();
$n -> data2img();

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

設定ファイルを変更します

location / {
root /usr/local/nginx/html;
auth_basic “Auth”;
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
index index.php index.htm;
}


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


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

SetEnvIfNoCase Referer “^http://www.test.com/” local_ref=1
<FilesMatch “.(gif|jpg)”>
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>

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

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?test.com /.*$ [NC]
RewriteRule \.(gif|jpg)$ http://www.test.com/abc.gif [R,L]

ホストの画像が盗まれた場合、abc.gif の「ホットリンク禁止」画像のみが表示されます。

関連する推奨事項:

TP5 認証権限管理の例

PHP で権限管理機能を実装する方法

PHP に含まれる Web サイト Baidu と Sogou を簡単に取得する方法

以上がPHPで画像へのユーザーアクセスを制御する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。