現在の位置: ホーム> 最新記事一覧> hash_update_stream関数を使用してアップロードされたファイルを安全に検証する方法は?

hash_update_stream関数を使用してアップロードされたファイルを安全に検証する方法は?

M66 2025-06-23

ファイルをアップロードするとき、ファイルの整合性とセキュリティを確保することが非常に重要なステップです。アップロード中にファイルが改ざんされているかどうかを確認するには、ハッシュ検証を使用できます。 PHPは、 hash_update_stream関数を提供します。これにより、大きなファイルの検証が効率的に検証できます。

この記事では、hash_update_stream関数を使用してファイルのハッシュ検証を実行し、ファイルのセキュリティを確保する方法を詳細に紹介します。

1。Hash_update_stream関数は何ですか?

hash_update_streamは、PHPの組み込みハッシュ機能です。リアルタイムでストリーム(ファイルストリームなど)を処理してハッシュできます。ハッシュ検証のためにファイル全体を一度にロードするのと比較すると、 Hash_Update_stream関数はメモリリソースを節約し、大きなファイルの検証に適しています。

関数の署名は次のとおりです。

 bool hash_update_stream ( resource $context , resource $file )
  • $コンテキストHASH_INIT関数によって作成されたハッシュコンテキストリソース。

  • $ファイル:ファイルリソース、通常はFOPEN関数によって開かれたファイルストリーム。

2。hash_update_streamを使用して、アップロードされたファイルのハッシュ検証を行います

2.1アップロードファイルの基本処理

ファイルをアップロードするときは、通常、 $ _files HyperGlobal Arrayを使用してファイル情報を取得します。ハッシュ検証を実行する前に、ファイルが有効かどうかを確認して処理する必要があります。

ファイルのアップロードの基本的な例を次に示します。

 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
    $file = $_FILES['file'];
    
    // ファイルが正常にアップロードされているかどうかを確認してください
    if ($file['error'] === UPLOAD_ERR_OK) {
        $filePath = $file['tmp_name']; // 一時ファイルパス
        $fileName = $file['name'];
        
        // ハッシュ検証を実行します
        if (checkFileHash($filePath)) {
            echo "ハッシュ検証を正常にファイルします,ファイルセキュリティ。";
        } else {
            echo "ファイルハッシュ検証に失敗しました,ファイルが改ざんされている可能性があります。";
        }
    } else {
        echo "ファイルのアップロードに失敗しました,エラーコード:" . $file['error'];
    }
}

2.2ファイルハッシュ検証にはhash_update_streamを使用します

次に、 CheckFileHash関数を書き込みます。これは、 hash_update_stream関数をアップロードしたファイルをハッシュします。

 function checkFileHash($filePath) {
    // aを作成しますSHA256ハッシュコンテキスト
    $hashContext = hash_init('sha256');

    // ファイルストリームを開きます
    $fileStream = fopen($filePath, 'rb');
    if ($fileStream === false) {
        return false; // 无法ファイルストリームを開きます
    }

    // 使用 hash_update_stream ファイルストリームをハッシュします
    if (hash_update_stream($hashContext, $fileStream)) {
        // 最終的なハッシュ値を取得します
        $fileHash = hash_final($hashContext);
        fclose($fileStream);

        // ハッシュ値を期待値と比較できます,ファイルが改ざんされていないことを確認してください
        // ここでの値の例 `予想されるハッシュ値` 例として,実際の正しいハッシュ値に置き換える必要があります
        $expectedHash = '予想されるハッシュ値';
        return $fileHash === $expectedHash;
    }

    fclose($fileStream);
    return false; // ハッシュ計算に失敗しました
}

2.3なぜhash_update_streamを使用するのですか?

HASH_UPDATE_STREAM関数の主な利点は、ファイル全体をメモリにロードせずにストリーミングデータを処理できることです。大きなファイルの場合、 hash_update_streamを使用すると、特にメモリリソースが限られている環境で、ファイル全体を一度にロードしてハッシュを計算するよりも効率的です。

3。概要

hash_update_stream関数をアップロードされたファイルでハッシュ検証に使用すると、アップロード中にファイルが改ざんされないように効果的に防止するだけでなく、大きなファイルを処理し、メモリを消費しすぎないようにします。ファイルのハッシュ値を期待値と組み合わせることにより、ファイルの整合性を検証し、それによりシステムのセキュリティを改善できます。

実際のアプリケーションでは、ファイル検証を実行するニーズに応じて、異なるハッシュアルゴリズム( SHA256MD5など)を選択できます。