2

こんにちはウェブ開発の達人

パフォーマンスを損なうことなく画像を安全に保存および提供するためのベストプラクティスは何ですか?

Webアクセスできないフォルダー(おそらく/ wwwの前より上)にユーザー画像を保存し、ユーザーがページにログインした後にオンデマンドで提供することは可能ですか?ユーザー名とパスワードのアクセスメカニズムはすでに導入されています。

ユーザーは、これらの画像が一般公開されることを望んでいません。

Ubuntuでphpを使用してnginxを実行しています。データベースはmysqlです。

ありがとうございました!

4

4 に答える 4

1

phpファイルを使用してこれらの画像を提供し、提供する前にいくつかのチェックを行うことができます。私はこのようなことを試みます:

<?php
if ( /* YOUR CHECK HERE */ ) {
    header('Content-Type: image/jpeg'); // Or whatever your content type might be
    readfile('/path/to/file');
}

RewriteRuleを使用して、phpファイルへのこれらの呼び出しを実際の画像のように見せることができます。

rewrite /img/users/pictures/(.*) /your_php_file.php?path=$1 break;

またはそのようなもの。

これは安全かもしれませんが、サーバーが2つのファイルにアクセスする必要があるため、あまり効率的ではありません。phpファイルと画像ファイル

于 2012-12-09T18:42:35.360 に答える
0

そのようなことを行う最も効率的な方法は、おそらくApacheの書き換えによるものです。ユーザーがログインするときに、ユーザーのセッションIDにキー設定されたリライトマップにエントリを追加します。エントリの値は、画像を保持しているディレクトリを指します。CookieからセッションIDを解析し、URLをイメージディレクトリに書き換える書き換えルールがあります。事実上、あなたはそのユーザーだけにディレクトリをウェブアクセスさせているのです。

Apacheの書き換えを伴うものはすべてブードゥーです。あなたが本当にその種のトラフィックを持っていない限り、それは複雑にする価値がありません。PHPを介してファイルを提供することは非効率的ですが、多くの場合、非効率性は許容できます。

于 2012-12-09T19:07:36.660 に答える
0

おそらく、Amazon S3のようなCDNの使用を評価する必要があります。これは、RESTful認証を介して安全なアクセスを提供します:http ://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.htmlそしてサーバーが仕事をするのを避けますofは静的コンテンツを提供します。

于 2012-12-09T18:54:27.617 に答える
0

それはあなたが持っている他の要件に依存します。リンクを送信してユーザーに画像を共有させ、システムで認証されていなくても、このリンクを持っているユーザーだけが画像を表示できるようにすることができます。提案された実装はこれを困難にします。

「リーク」の可能性についてあまり心配していない場合は、画像にランダムな名前を生成し、これの真のランダム性に全力を注ぐことができるため、画像名を推測するのと同じくらい難しいです。パスワード。一方では、この「パスワードで保護されている」と見なすことができますが、パスはプロキシやブラウザの履歴などにキャッシュされるため、保護しているリソースによっては、これが解決策にならない場合があることに注意してください。

于 2012-12-09T19:18:16.380 に答える