• ベストアンサー

認証機能を使用して画像を見せないようにしたい

認証機能を使用して画像を見せないようにしたいのですが、どうしたらいいでしょうか。 現在、PHP+MySQLでプログラムを組んでいますが、写真画像は、別フォルダ内に保管し、MySQLでファイル名の検索するようにしています。 SESSION機能を利用し、各PHPの認証機能を作ることができました。しかしながら、各PHPページ内にある画像表示のプロパティを開いて、そのURLをコピーし、ログアウト後、再度プロパティでコピーしたURLをたたくと、表示されてしまいます。 画像にもSESSION機能をつけることはできないのでしょうか。 また、同等のものでもOKです。 一時、HTTP認証も考えましたが、ID/PASSの発行数が多いので 断念しました。 ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • nick9090
  • ベストアンサー率26% (102/378)
回答No.2

No.1さんも回答している通り、画像を吐き出す専用のスクリプトを用意します。 それを仮にimage.phpとします。 あと、mod_rewriteを使います。詳しい使い方は検索してください。 たとえば、http://example.com/image/hoge.jpg という画像へのアクセスを制御するには、以下のようにします。 まず、mod_rewriteにより、誰かが http://example.com/image/hoge.jpg にアクセスすると、たとえば image/hoge.jpg がPATH_INFOとしてimage.phpに渡ってリダイレクトされるように設定する。 あとは、それを受け取ったimage.phpが、アクセス者が閲覧権限を持っているかどうかをSESSION変数で確認し、OKなら画像(hoge.jpg)を吐き出す、NGならエラーメッセージを出す。 なお、この場合はHTTPヘッダも自前で吐き出す必要がありますので、その辺の勉強も必要になってきます。勉強と言っても、ちょっと検索すればすぐに見つかりますが。 それとこの手の処理をする場合は「ディレクトリ・トラバーサル」など、ファイルシステム関連への攻撃を防ぐ措置も十分考慮に入れておいてください。

php2864
質問者

お礼

ありがとうございました。1か月やってみましたが、難しく手をこまねいています。1か月も返答しないですみませんでした。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

image.php的なものを用意し、 image.php?id=1234のようにidを渡してmysqlから所在URLを受け取り PHPの処理でセッションを確保しつつ、headerをつけて画像を吐き出して やればよいでしょう。 どうしてもめんどうならBasic認証ですね。それならフォルダ単位での認証なので ダイレクトなアクセスをはじけます。 (もちろん厳密な認証という意味ではあまいですが・・・)

関連するQ&A

専門家に質問してみよう