4

いくつかの mp3 ファイルを再生するためにフラッシュ プレーヤーを使用しています。Firefox では通常どおりロードされますが、IE ではロードされません。.mp3 ファイルの URL に移動すると、mp3 のソース コードが表示されます (ダウンロードなどを提供する代わりに)。だから私はそれを修正するために小さなスクリプトを使用しました:

$url = $_GET['url'];
header('Content-type: application/force-download');
header('Content-Transfer-Encoding: Binary');
header("Content-disposition: attachment; filename=demo.mp3");
readfile($url);

上記で大丈夫かお聞きしたいです。さらに、サーバーはこの方法で帯域幅を失いますか? 最後に、それはサーバーのリソースに影響しますか? ありがとう。

4

4 に答える 4

9

いいえ、それは安全ではありません。あなたがデータベースのパスワードを持っていてdatabase.php、私が と入力database.phpした場合$_GET['url']、あなたのスクリプトはあなたのパスワードを含むその PHP ファイルを私に送信します。

はい、これは帯域幅と一部のサーバー リソースを使い果たします。

于 2010-06-20T14:32:23.650 に答える
5

安全ではありません。このようにする必要はありません。

@ceejayoz が概説するセキュリティへの影響に加えて、allow_url_fopenPHP 設定が有効になっている場合は、任意の URL を に挿入することもできます$url。そうすれば、サーバーが他のサーバーから大量のデータをストリーミングするために簡単に悪用される可能性があり、あらゆる種類の影響があります.

ファイルを提供するこの方法は、本当に必要な場合にのみ使用してください。Web サーバーを介して静的リソースを要求するよりも多くのリソースを消費します (高価な PHP プロセスを開始する必要があるため)。

とにかく、あなたの場合は必要ありません。Web サーバーがcontent-typeMP3 ファイルと共に正しいヘッダーを提供していないようです。それはあなたが修正すべきものです。

.htaccessおそらく、Apache を使用している場合は、MP3 があるディレクトリに次の内容のファイルを追加します。

AddType audio/mpeg .mp3

すでに問題を修正しています。そうでない場合でも、うまくいく場合はforce-download、試してください

AddType application/force-download .mp3
于 2010-06-20T14:34:44.697 に答える
2

実際の問題は、mp3 ファイルを提供するときにコンテンツ タイプ ヘッダーをクライアントに送信していないことです。mp3 ファイルのコンテンツを送信する前に、コンテンツ タイプ ヘッダーを設定していることを確認してください。

スクリプトを使用せずに Web サーバーから直接提供する場合は、Web サーバーの構成で content-type を構成するだけです。

Apache の場合、これを .htaccess ファイルで構成できます。

AddType audio/mpeg .mp3
于 2010-06-20T15:15:49.763 に答える
1

ええ、要求されたファイルパスを検証/サニタイズしていないため、ここには間違いなくセキュリティ上のリスクがあります。そのため、ファイルをユーザーに送信する前に、必ず確認してください!

これは帯域幅とサーバー リソースを使用しますが、ファイルを定期的にダウンロードするよりも最小限に抑えられます。唯一の余分なオーバーヘッドは、PHP の処理/実行です。おそらく違いに気付かないでしょう。

于 2010-06-20T15:21:17.127 に答える