Webサイト開発では、ファイルアップロード機能は一般的で重要なモジュールですが、セキュリティリスクももたらします。攻撃者は悪意のあるファイルをアップロードして、サーバーのセキュリティを危険にさらす場合があります。このタイプのリスクを防ぐために、一般的に使用される方法は、アップロードされたファイルがファイルのハッシュ値(MD5など)によって既知の悪意のあるファイルであるかどうかを判断することです。
この記事では、PHPビルトイン機能MD5_FILE()を使用して、既知の悪意のあるファイルのMD5値リストを組み合わせて、アップロードされたファイルが危険にさらされているかどうかを判断する方法を紹介します。
MD5_FILE()は、指定されたファイルのMD5ハッシュ値を計算するPHPの関数です。 md5()とは異なり、 md5()ハッシュは文字列ですが、 md5_file()はファイルコンテンツのハッシュを直接計算します。これは、ファイルが一貫しているかどうかを検出するのに適しています。
使用例:
$hash = md5_file('/path/to/file.txt');
echo $hash;
返品値は、ファイルコンテンツの32ビット16進数md5値です。
配列またはデータベースに保存されている既知の悪意のあるファイルのMD5ハッシュ値のリストを維持します。
ユーザーがファイルをアップロードしたら、ファイルを一時ディレクトリに保存します。
md5_file()を使用して、ファイルのハッシュ値を計算します。
ハッシュ値が悪意のあるリストにあるかどうかを決定します。
存在する場合、ファイルはアップロードまたは削除されません。それ以外の場合は、アップロードが許可されています。
次の例は、悪意のあるファイルのアップロードと検出の単純なファイルを示しています。
<?php
// 悪意のあるファイルが既知です MD5 リスト(例)
$malicious_md5_list = [
'd41d8cd98f00b204e9800998ecf8427e', // 空文件例
'5d41402abc4b2a76b9719d911017c592', // 其他恶意文件例
];
// アップロードされたファイルがあるかどうかを判断します
if (isset($_FILES['upload_file']) && $_FILES['upload_file']['error'] === UPLOAD_ERR_OK) {
$tmpFilePath = $_FILES['upload_file']['tmp_name'];
// ファイルを計算します MD5 価値
$fileMd5 = md5_file($tmpFilePath);
// 悪意のあるファイルのかどうかを確認してください
if (in_array($fileMd5, $malicious_md5_list)) {
echo "アップロードされたファイルは、既知の悪意のあるファイルとして検出されます,アップロードに失敗しました。";
// 一時ファイルを削除するか、ログログを削除することができます
unlink($tmpFilePath);
} else {
// ファイルをターゲットディレクトリに移動します
$destination = __DIR__ . '/uploads/' . basename($_FILES['upload_file']['name']);
if (move_uploaded_file($tmpFilePath, $destination)) {
echo "ファイルアップロードに正常にアップロードします。";
} else {
echo "ファイルの保存は失敗しました。";
}
}
} else {
echo "アップロードファイルは検出されなかったか、エラーをアップロードしませんでした。";
}
?>
悪意のあるファイルライブラリの更新:最新の悪意のあるファイルハッシュライブラリを維持することが重要であり、定期的に更新することをお勧めします。
MD5衝突リスク:MD5は衝突リスクがあることが証明されており、極端な場合には、攻撃者が同じハッシュでファイルを構築することができます。 Sha256のようなより安全なハッシュ関数を使用することを検討してください( hash_file( 'sha256'、$ file)を使用)。
複数の検出メカニズム:ハッシュ検出のみに依存しないでください。ファイルタイプの確認、ファイル拡張制限、コンテンツスキャン(ウイルス対策ソフトウェアなど)などの複数の測定値を組み合わせることが最善です。
許可セキュリティ:悪意のあるファイルが直接実行されないようにディレクトリをアップロードするには、合理的な許可が必要です。
PHPのMD5_FILE()関数を使用して、アップロードされたファイルのコンテンツが既知の悪意のあるファイルと一致するかどうかをすばやく判断し、アップロードファイルのセキュリティを改善するのに役立ちます。完全な悪意のあるファイルのハッシュライブラリと複数の保護対策を組み合わせることで、悪意のあるファイルがサーバーに害を及ぼすことを効果的に防ぐことができます。