0

現在、MVC3 で画像ストレージを開発しており、画像へのアクセスを制限する方法について質問があります。HTML シラミに画像を挿入<img src="/ImagesFolder/image0001.jpg">すると正しく表示されますが、ブラウザにフル パスを書き込むと、その画像も表示されます。許したくない。1 つの方法は画像を base64 文字列として埋め込むことですが、これは小さな画像にのみ適しています。私は大きな画像を持っています。

画像アクセス アクションを作成し、 のようなものを使用するという推奨事項を見てきまし <img src="/GetImage?ID=1123">たが、その GetImage ページでは、まだダイレクト パスまたは base64 メソッドのいずれかを使用しますか? 最初の方法では、イメージファイルへのフルパスが親ビューに変換され、画像のプロパティで見ることができますか?

System.Drawing.Image を使用する方法はあり<img src=""> ますか? サンプルを知っていますか?

4

2 に答える 2

1

これを行う 1 つの方法は、http サーバーによって公開されていないパスにすべての画像を配置することです。この方法では、ユーザーがブラウザに入力できる直接パスはありません。

スクリプト自体はサーバー上にあるため、このパスにアクセスできます。画像アクセス メソッドは、実際のデータを返し、たとえば jpeg の画像/jpeg を提供しているデータとして自身を識別するスクリプトである必要があります。このようにして、誰かがあなたが設計したもの以外の方法で GetImage メソッドにアクセスした場合、スクリプトはそれを (リファラーまたはその他の方法で) 検出し、何も返さないことができます。

于 2013-03-28T08:10:49.830 に答える
0

あなたが言及した「画像アクセスアクション」ソリューションは、実装が最も簡単なソリューションだと思います。GetImage スクリプトは、たとえば、アプリケーションに設定した Cookie をチェックして、最初にサイトにアクセスした人だけが画像を受信できるようにすることができます。

さて、あなたのサイトを訪れた人がブラウザにURL を入力して画像を表示するのを防ぎたい場合、これはよりトリッキーであり、私の意見では簡単な解決策はありません。HTTPヘッダーをチェックしてReferer、リクエストがWebサイトに関連しているかどうかを確認できます(URLをURLバーに入力するとRefererは空になりますが、画像が含まれている場合は画像を含むページのURLが含まれます)<img src=...>)、しかし、このソリューションには欠点があります。ブラウザーが Referer ヘッダーを送信しないようにするため (一般的にはプライバシー上の理由からです。これは非常に広範な構成ではありませんが、これが発生します)、画像がまったく表示されなくなります。考えられる 2 番目の欠点は、キャッシュを許可しないヘッダーを使用してサーバーを構成できない限り、URL を入力することでブラウザーに既にキャッシュされている画像を表示できる可能性があることです。

于 2013-03-28T08:07:43.513 に答える