現在の位置: ホーム> 最新記事一覧> MD5_FILE関数を使用して、PHPのファイルアップロードの正当性を確認する方法は?

MD5_FILE関数を使用して、PHPのファイルアップロードの正当性を確認する方法は?

gitbox 2025-08-23
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// コードのこの部分は、記事の内容とは何の関係もありません,たとえば、表示のみ</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"この記事を読んでください!"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-comment"># 使い方 md5_file 関数はにあります PHP ファイルアップロードの合法性を確認します?</span></span><span>

ウェブサイト開発,ファイルアップロード機能は非常に一般的な要件です。しかし,安全を確保するため,開発者は、アップロードされたファイルを確認する必要があります,悪意のあるファイルのアップロードのリスクを防ぎます。PHP さまざまなファイル検証方法を提供します,で `md5_file` 機能はシンプルで効率的です,ファイルの整合性と合法性を検証するために一般的に使用されます。

</span><span><span class="hljs-comment">## 何ですか md5_file 関数?</span></span><span>

`md5_file` はい PHP 内置的関数,指定されたファイルを計算するために使用されます MD5 ハッシュ値。MD5 はい一种广泛使用的哈希算法,任意の長さのデータを固定長の文字列にマッピングできます(</span><span><span class="hljs-number">32</span></span><span>16進数文字),ファイルの整合性を検証するために一般的に使用されます。

関数原型如下:

```php
</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">md5_file</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filename</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$binary</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>)
</span></span>
  • $ filename :計算する必要があるファイルパス

  • $ binary (optional):結果をバイナリ形式で返すかどうかにかかわらず、デフォルトの16進数文字列が返されます

なぜMD5_FILEを使用してファイルのアップロードを確認するのですか?

ファイルがアップロードされると、攻撃者は悪意のあるコードをアップロードしたり、ファイルを改ざんしたりできます。アップロードされたファイルのMD5値を計算することにより、次のことができます。

  • 送信中にファイルが改ざんまたは破損していることを確認する

  • アップロードされたファイルのMD5値を既知のセキュアファイルのMD5と比較して、ファイルが合法かどうかを判断します

  • 同じファイルの繰り返しのアップロードを防止します(キャッシュまたは重複排除に使用できます)

実装手順

  1. ユーザーがファイルをアップロードした後、PHPはファイルを一時ディレクトリに保存します。

  2. MD5_FILEを使用して、この一時ファイルのMD5値を計算します。

  3. 計算されたMD5を、法的ファイルのハッシュ値の事前定義されたリストと比較します。

  4. 一致する場合、ファイルは合法です。それ以外の場合は、アップロードが拒否されます。

サンプルコード

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 事前定義された法的ファイルを想定しますMD5値配列</span></span><span>
</span><span><span class="hljs-variable">$allowed_md5_list</span></span><span> = [
    </span><span><span class="hljs-string">'d41d8cd98f00b204e9800998ecf8427e'</span></span><span>, </span><span><span class="hljs-comment">// 空のファイルの例</span></span><span>
    </span><span><span class="hljs-string">'5d41402abc4b2a76b9719d911017c592'</span></span><span>, </span><span><span class="hljs-comment">// 例MD5</span></span><span>
];

</span><span><span class="hljs-comment">// 检查文件はい否上传成功</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'upload'</span></span><span>]) &amp;&amp; </span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'upload'</span></span><span>][</span><span><span class="hljs-string">'error'</span></span><span>] === UPLOAD_ERR_OK) {
    </span><span><span class="hljs-variable">$tmp_file</span></span><span> = </span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'upload'</span></span><span>][</span><span><span class="hljs-string">'tmp_name'</span></span><span>];
    
    </span><span><span class="hljs-comment">// アップロードされたファイルを計算しますMD5価値</span></span><span>
    </span><span><span class="hljs-variable">$file_md5</span></span><span> = </span><span><span class="hljs-title function_ invoke__">md5_file</span></span><span>(</span><span><span class="hljs-variable">$tmp_file</span></span><span>);
    
    </span><span><span class="hljs-comment">// 判断MD5はい否在合法列表中</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$file_md5</span></span><span>, </span><span><span class="hljs-variable">$allowed_md5_list</span></span><span>)) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ファイルアップロードリーガル,MD5検証が合格しました。"</span></span><span>;
        </span><span><span class="hljs-comment">// ここでは、ファイルの保存などの後続の操作を実行できます</span></span><span>
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ファイルのアップロードは違法です,MD5検証に失敗しました。"</span></span><span>;
        </span><span><span class="hljs-comment">// ここでファイルを削除したり、エラーを返すことができます</span></span><span>
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"アップロードファイルまたはアップロードエラーは検出されませんでした。"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

注意すべきこと

  • MD5は衝突リスクがあることが証明されており、パスワードなどのセキュリティニーズが高いシナリオには適していません。しかし、特に既知のファイルを比較する場合、ファイルの整合性検証にはまだ有効です。

  • セキュリティを改善するには、ファイルタイプの検出(MIMEタイプなど)、ファイル拡張検証、ファイルサイズの制限などの複数の検証測定を組み合わせることをお勧めします。

  • セキュリティ要件が高い場合は、SHA-256( hash_file( 'sha256'、$ filename )などのより安全なハッシュアルゴリズムを使用することを検討してください。

要約します

MD5_FILE関数は、PHPファイルのアップロードを安全に検証するためのシンプルで効果的な手段を提供します。アップロードされたファイルのMD5値を計算し、Legalファイルのハッシュ値と比較することにより、違法ファイルを効果的に防止し、Webサイトセキュリティを確保できます。他のセキュリティ対策を合理的に組み合わせると、ファイルアップロードモジュールのセキュリティが大幅に向上します。

<hr> <?php //記事が終了し、無関係なphpコードの例を添付します。 ?>
 <span></span>