今、私は自分のウェブサイト上の画像にアクセスできるユーザーを制御するためにbase64を使用しています。私はwebrootディレクトリの外にこれらのイメージを保存するので、誰もそれらに直接アクセスできません。次に、postgresqlデータベースにアクセスできるレコードによって、誰がこれらのイメージにアクセスできるかを判断します。基本的に、レコード "a"を照会できる場合、それらはピクチャー "a"を見ることができます。画像を保護する - php base64 vs readfile
if (file_exists($pic)) {
$imgbinary = fread(fopen($pic, "r"), filesize($pic));
$picbase64 = "data:image/gif;base64," . base64_encode($imgbinary);
echo('<img src="' . $picbase64 . '" />');
私のセキュリティを維持しながら、base64ではなくreadfileを使用するにはどうすればよいですか?たとえば、readfileメソッドを使用してイメージをクライアントブラウザに配信する場合、$_GET
メソッドを使用して、クライアントブラウザ上にイメージを表示するreadfileおよびヘッダータイプを持つPHPスクリプトに変数を送信する必要があります。問題は誰でもhtmlソースを見て<img src=phpscript.php?imagename=foo.jpg />
を見て、ブラウザでhttp://www.hostname/phpscript.php?imagename=bar.jpg
のような引数でスクリプトを呼び出すことができるということです。 base64メソッドでは、画像を処理する別のスクリプトを$_GET
引数に取る必要はなく、代わりに画像がHTMLページに直接埋め込まれているので、私は現在これを使用しています。
ありがとうございました!
-Edit- ご迷惑をおかけして申し訳ございませんが、匿名アクセスが許可されており、一部の情報は一般公開されています。意味は、あなたが認証されておらず、レコード "a"を読むことができる場合、画像 "a"も見ることができます。
別の画像リクエストにユーザーのCookieが含まれていませんか?ユーザーがログインしていて、 'phpscript.php'でアクセスできたかどうかを確認できます。 –