これは重要なセキュリティ問題であり、これが可能になるはずです。
簡単な例:
コミュニティポータルを実行します。ユーザーが登録され、写真をアップロードします。アプリケーションは、画像の表示が許可されるたびにセキュリティルールを提供します。たとえば、他の誰かがアップロードした写真を表示できるようにするには、ユーザーはシステムの両側の友人である必要があります。
ここに問題があります:誰かがサーバーのイメージディレクトリをクロールする可能性があります。しかし、このような攻撃からユーザーを保護したいのです。
画像のバイナリデータをHTMLマークアップに直接配置できる場合は、画像のユーザーアクセスをユーザーに制限し、Webアプリケーションの実行をグループ化し、Apacheユーザーとグループに画像データを直接渡すことができます。 HTML。
その場合、唯一考えられる弱点は、Webアプリを実行するユーザーのパスワードです。
すでに可能性はありますか?
他の回答で説明されているように、ファイルを保護する他の(より良い)方法がありますが、画像をHTMLに埋め込むことは可能です。
使用 <img>
このようにタグ付けします:
<img src="data:image/gif;base64,xxxxxxxxxxxxx...">
どこ xxxxx...
partは、gif画像データのbase64エンコードです。
画像ディレクトリにセキュリティが必要な場合は、ディレクトリをまったく公開しません。代わりに、私のimg src属性は、ユーザーIDと画像IDをパラメーターとして受け取るページを参照します。
ページは、そのユーザーが実際にその写真を見るためのアクセス権を持っていることを検証します。すべて問題なければ、バイナリを送り返します。それ以外の場合は何も送信しません。
例えば:
<img src="imgaccess.php?userid=1111&imgid=223423" />
また、推測可能なIDは使用しません。代わりに、base 64でエンコードされたGUIDのようなものにこだわる。
わかりませんが、ここに行きます。画像フォルダにある静的画像を提供する代わりに、選択したサーバー側の技術を使用して、画像を動的にクライアントに送信できないのはなぜですか?サーバー側のコードが混在して、プログラムでアクセスを許可または拒否することができますか?
<img src="/images/getImage.aspx?id=123353 />
写真をドキュメントルートからプライベートディレクトリに移動し、そのディレクトリにアクセスできるアプリケーションを介して配信できます。アプリが画像タグを生成するたびに、特定の画像にアクセスするときに指定する必要がある短命のセキュリティトークンも生成します。
<img src="/app/getImage.xyz?image=12345&token=12a342e32b321" />
誰かが適切なタイミングで適切なトークンを適切なイメージでブルートフォースする可能性は非常にまれです。少なくとも「getImage」のトークンを検証する可能性があります。
PHPの例:
$token = md5($_SESSION['user_id'].' '.$imageID.' '.$SECRET_SALT.' '.date('z'));
HTML5では、canvasタグとJavaScriptを使用してこれを行うことができます。
おそらく、CSSまたはテーブルレイアウトのいずれかを使用して画像を描画できます(おそらく、パフォーマンス、解像度、移植性が非常に悪い)。
いずれにせよ、人々があなたの写真を撮るのを止めることはできません。彼らはスクリーンショットを撮って切り取ることができました。
クリスが答えで述べたように、各画像のURLを推測したりブルートフォースするのが簡単ではないように、長い画像IDを持っていることが重要です。また、ウェブサーバーディレクトリのディレクトリリストもありません。