ホームページ  >  記事  >  バックエンド開発  >  PHP が Thunder ダウンロードを防ぐ方法の詳細な説明

PHP が Thunder ダウンロードを防ぐ方法の詳細な説明

*文
*文オリジナル
2018-01-03 11:13:202376ブラウズ

PHP はどのようにして Thunder ダウンロードを防止しますか?この記事では主に、PHPのホットリンクとThunderダウンロードを防ぐ方法を詳しく説明し、皆様の参考にさせていただきます。お役に立てれば幸いです。

ホットリンクの防止:

原則: サーバーがファイルのダウンロードを要求すると、リンクを取得し、このリンクを通じてファイルを見つけてダウンロードします。つまり、このリンクが存在する必要があるということですが、ホットリンクを防ぐにはどうすればよいでしょうか?つまり、与えられたリンクは実際のファイル リンクではありません。これは簡単に考えられますが、実際のリンクを提供せずにファイルをダウンロードさせるにはどうすればよいでしょうか?

PHP を使用して Web ページを作成するときは、常に PHP コードを HTML コードの途中に挿入し、次に PHP を使用して残りのコードを生成し、それをクライアントに渡します。つまり、クライアントはPHP スクリプトの操作結果を受け取ります。つまり、php スクリプトを実行した結果がダウンロードしたいファイルである場合です。このようにして、ファイルのホットリンク防止を実現しました。つまり、取得できるリンクはこの php ファイルであり、その後、この常に変化する php ファイルが、ダウンロードするファイルに変換されます。

コードは次のとおりです:

$FileAddress : 文件的相对路径。
$DownloadName : 文件下载到客户端的名字。
if(file_exists($FileAddress) && $file=fopen($FileAddress,'r')) { //首先要判断文件是否存在,如果文件跟本不存在的话,后边的代码也是白费。
 Header('content-type:application/octet-stream'); //声明文件类型,这里是为了让客户端下载它,而不是打开它,所以声明为未知二进制文件。否则客户端会根据其文件类型在线打开它。
 Header('content-Length:'.filesize($FileAddress)); //声明文件的大小,告诉客户端这个文件的大小,否则客户端下载的时候看不到进度。
 Header('content-disposition:attachment;filename='.$DownloadName); //声明文件名,这里就是告诉客户端它要下载的文件的名字,否则名字就会是你php文件的名字。
 echo fread($file,filesize($FileAddress)); //这里就是将加载的文件echo出来,因此这个php文件不能出现其他任何的文字,就是说这里若是出现了任何其他的输出的话都会输出到客户端下载的文件里。
 fclose($file); //最后关闭句柄。
}

上記のコードは、これら 2 つの変数を定義するだけで、ホットリンクを防ぐタスクを正常に完了できます。これら 2 つの変数は GET を通じて取得できます。たとえば、ファイルの実際のリンクをデータベース内のその番号にマッピングする場合、ファイルをダウンロードするにはファイル ID を取得するだけで済み、実際のファイル アドレスのセキュリティが確保されます。 。もちろん、ファイルへの実際のリンクを暗号化することもできます。つまり、実際のリンクについては言及せず、クライアントが見える場所に置くだけです。

Thunderのダウンロードを防ぐ

実際、上記のコードではリンクを非表示にすることしかできませんが、クライアントがThunderやその他のツールを使用してリンクをダウンロードするのを防ぐことはできません。では、Thunder などのツールを使用してダウンロードされないようにするにはどうすればよいでしょうか?

前に述べたように、さまざまな方法を使用してこのファイルの php ファイルへのパスを取得できるため、この情報をリンクに追加する必要はありません。たとえば、ファイル ID は POST を通じて送信でき、ファイル ID はセッションを通じて送信できます。

これを私は「派手な許可されたダウンロード」と呼んでいます。

1. ダウンロードしたヘッダー ページにクライアント セッションを記述して、その認証コードとファイル ID を保存し、ダウンロードした PHP にセッションを検証するコードを追加します。これにより、クライアントが接続に入っても Thunder ダウンロードが行われます。も無駄です。

2. ダウンロードヘッダーページに隠しフォームを追加し、POST を使用してダウンロード機能を実装する php に送信することもできます。これにより、サードパーティのダウンロード ツールがダウンロードされないようにすることもできます。

要するに、上記の 2 つの方法は、ダウンロードするファイルの情報とリンクを分離し、1 つのリンクだけではファイルをダウンロードできないようにすることを目的としています。

関連する推奨事項:

phpファイルの分割とマージ(ブレークポイント再開)

PHPファイル自体の操作

PHPファイルロックとプロセスロックの簡単な紹介

以上がPHP が Thunder ダウンロードを防ぐ方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。