8

私がしていること:

基本的に、PHPで記述されたログインページで保護されたWebサイトを作成する必要があります。ログインすると、整数を読み取る検索バーがあり、データはPHPスクリプトに送信され、名前に数字が含まれる画像が取得されます。

(検索対象のこのサーバーに数千枚の画像を保存します-インベントリ画像)

-

助けが必要なもの:

私の調査から、速度と非効率性のために、MySQLなどのデータベースを使用して実際の画像を保存しないことを理解しています。データベースに保存せず、提案どおりにサーバーのファイルシステムに残しておくと、誰かがアドレスバーに直接URLを入力すると、サーバー上のファイルに移動しませんか?

これをどのように防ぎますか。ログインページを正常に通過しない限り、サーバー上のファイルを表示できません。

助けてくれてありがとう、洞察や提案をいただければ幸いです。将来、より複雑な情報が追加されるため、これは私にとって重要です。

4

3 に答える 3

6

PHP(またはその他のスクリプト)を介してファイルのダウンロードを処理するための推奨される方法は、いわゆる「X-Sendfile」応答ヘッダーを使用することです。

PHPスクリプトは認証を処理し、検証されると、ファイルを配信するようにWebサーバーに指示する「X-Sendfile」とともにいくつかの応答ヘッダーを設定します。スクリプトが終了し、Webサーバーが引き継ぎます。

簡単な例については、こちらをご覧ください。

http://www.jasny.net/articles/how-i-php-x-sendfile/

于 2012-05-10T08:33:31.730 に答える
1

これはあなたの状況にとってはやり過ぎかもしれませんが、これは私が開発しているアプリでそれを行うことを考えている方法です:

まず、4台のサーバー、Webサーバー、ミドルウェアサーバー、およびデータサーバーがあります。

誰かがWebサーバーに要求を送信すると、Webサーバーはミドルウェアサーバーに接続してファイルを要求し、セッションキーや要求されたファイルなどのユーザー資格情報を渡します。ミドルウェアはデータベースに接続し、ユーザーがそのファイルに対する特権を持つセッションとを検証します。エラー、またはアクセス権がある場合はバイナリデータのいずれかを返します。Webサーバーとミドルウェアサーバーの両方で出力バッファリングをオフにすると、ミドルウェアサーバーからWebサーバーに100kブロックを送信でき、Webサーバーは2番目のブロックを受信して​​いる間に最初のブロックを出力します。

ファイル自体は、ftp、sftp、またはその他のファイル共有を介してデータベースサーバーに保存できます。

x-sendfileを使用するほど効率的ではありませんが、誰かがWebサーバーを起動できる場合でも、ファイルにアクセスできません。上記のシナリオでは、アクセスできます。Webサーバーが唯一のパブリックサーバーであるため、残りのサーバーはプライベートネットワークに接続する必要があります。

実際のファイルデータを暗号化/復号化する暗号化サーバーにデータを送信することもできます

誰かがこれを改善する方法について何かアイデアがあれば、私は興味があります。

于 2012-08-13T04:12:41.973 に答える
0

あなたはこのようにそれを行うことができますこのようにphpでリソースサーブを書く

image.php?requestid=.....

そのファイルでrequestidを取得し、データベースから実際のリンク(ローカルリンク)を読み取り、画像ファイルを読み取り、データをブラウザに出力します

$id = $_GET['requestid'];
$link = get_local_link_from_id($id);  // return /images/file1.png......
$data = file_get_contents($link);
header('Content-Type', 'image/png');
echo $data;

しかし、私はあなたがそれをするべきではないと思います、ただランダムにファイルの名前を変えて、それらをたくさん作成してください....

于 2012-05-10T08:26:38.310 に答える