PHP におけるファイルアップロードのセキュリティ

王林
リリース: 2023-05-23 09:24:02
オリジナル
960 人が閲覧しました

インターネットの発展に伴い、ファイルのアップロード機能は、ほぼすべての Web アプリケーションの標準機能の 1 つになりました。 PHP では、ファイル アップロード関数は $_FILES スーパーグローバル変数を通じて実装されます。ただし、ファイルのアップロード機能は、多くの場合、Web アプリケーションのセキュリティ問題に対して最も脆弱な場所です。この記事では、実際の事例を組み合わせて、PHP におけるファイルアップロードのセキュリティで注意すべき問題を紹介し、いくつかの解決策を提供します。

1. ファイル アップロードの基本原則

PHP では、基本的に次の手順でファイル アップロードを実行できます:

1. HTML フォームに enctype 属性を設定します。 multipart/form-data にファイル アップロード コントロールを追加します

#2. サーバー側で $_FILES スーパー グローバル変数を使用して、アップロードされたファイルを受信します

3. $_FILES スーパー グローバル変数を通じて、ファイル名、タイプ、サイズなど、アップロードされたファイルに関する関連情報を取得します。

#4. アップロードされたファイルを指定されたディレクトリに保存します

2. ファイル アップロードの一般的なセキュリティ問題

1.悪意のあるファイル アップロード

悪意のあるファイル アップロードとは、攻撃者がファイル アップロード機能を使用して悪意のあるコードを含むファイルをアップロードし、これらのファイルを通じて攻撃を実行することを意味します。より一般的な攻撃方法の 1 つは、Web シェル ファイルをアップロードすることです。Web シェルにはコマンドを実行できる機能が含まれていることが多く、攻撃者は Web シェルを通じてサーバーを制御することができます。

2. 大きなファイルのアップロード

大きなファイルをアップロードすると、サーバーの帯域幅とストレージ容量が占有され、サーバーがクラッシュする可能性があります。さらに、攻撃者は大きなファイルをアップロードすることにより、サービス拒否攻撃 (DoS) を実行する可能性もあります。

3. ファイルの上書き

攻撃者がファイルをアップロードすることで、指定されたファイルを自身がアップロードしたファイルに置き換えることができた場合、システムの重要なデータが失われるなどの重大な結果を引き起こす可能性があります。攻撃者は、違法なアップロードやディレクトリ トラバーサルの脆弱性を悪用することで、ファイルを上書きする可能性があります。

4. ファイル タイプ バイパス

攻撃者は、ファイルのサフィックス名または MIME タイプを偽造することにより、サーバーのファイル タイプ チェックをバイパスし、それによっていくつかの違法なファイルをアップロードすることができます。たとえば、攻撃者は HTML ファイルの拡張子を PHP に変更して、XSS 攻撃を実装する可能性があります。

3. ファイル アップロード セキュリティのソリューション

1. ホワイトリスト フィルタリング

サーバー側では、特定のファイル タイプのみがホワイトリスト フィルタリングを通じてアップロードできます。要件を満たさないファイルをアップロードします。この方法により、ファイル タイプのバイパス攻撃を効果的に防ぐことができます。サンプル コードは次のとおりです。

$allowedExt = array('jpg', 'jpeg', 'png', 'gif');

//ファイルのファイル名と拡張子を取得します

$filename = $_FILES'file';
$fileext = strto lower(pathinfo($filename, PATHINFO_EXTENSION));
//ファイル タイプが許可されているかどうかを判断します
if(!in_array($fileext) , $allowedExt)){

//文件类型不被允许
die("File type not allowed.");
ログイン後にコピー

}

2. ファイル名の暗号化

アップロードされたファイル名をサーバー側で暗号化することで、ファイル名の改ざんを効果的に防止できます。攻撃者のファイル名によって推測または意図的に改ざんされる。たとえば、md5 暗号化アルゴリズムを使用してファイル名を暗号化できます。サンプル コードは次のとおりです。

$filename = $_FILES'file';

$filehash = md5($filename.time()).'.'.$fileext;


3. ファイル権限の設定

サーバー側でファイル権限を設定して、ファイルへのユーザーのアクセスを制限します。たとえば、アップロードされたファイルのアクセス許可を 644 に設定して、サーバーとユーザーのみにファイルへのアクセスを許可し、他のユーザーのファイルへのアクセスを拒否できます。

4. ファイルのアップロード パス

サーバー側でファイルのアップロード パスを設定する場合、アップロードされたファイルをアプリケーション ディレクトリに直接保存しないように、アップロードされたファイルを別のディレクトリに保存する必要があります。 、これによりセキュリティ侵害のリスクが軽減されます。

5. 概要

ファイルのアップロードは Web アプリケーションの一般的な機能ですが、セキュリティ上の問題を引き起こしやすいリンクでもあります。アップロードされたファイルのセキュリティを確保するには、ファイルタイプのフィルタリング、ファイル名の暗号化、ファイルのアクセス許可の設定、ファイルのアップロードパスの設定など、一連の予防措置を講じてシステムを確実に保護する必要があります。悪意のあるファイルのアップロードの脅威。

以上がPHP におけるファイルアップロードのセキュリティの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!