趣味のPHP |→お問い合わせ趣味のPHP
  1. ホーム
  2. 失敗から学ぶPHP
《記事番号:60》 2026-06-26 16:18:21
最近の、別の記事を探す

【タイトル】
画像偽装の対策
【キーワード】
画像偽装,MIMEタイプ,マジックナンバー,ステガノグラフィ,Polyglotファイル,GDライブラリ,.htaccess
【内容】
 このサイトの問い合わせは自作メールフォームを使っています。エンハンスで画像の添付を可能にしようとしていましたが、画像偽装の問題に突き当たりました。偽装の対策は入れ替えでなく、追加で多重化しました。
(1)MIMEタイプは信用できない
 $_FILES['userfile']['type']は PHP 側では何もチェックしていない。よって信用してはいけない。最初入れた処理はこれだけでした。この状態で検索して画像偽装の話を見つけました。
(2)マジックナンバー ファイルの先頭数バイトには画像ファイルの種類を判別するための固有のデータが記録されている。PHPの以下の処理を追加
  $finfo = new finfo(FILEINFO_MIME_TYPE);
$mimeType = $finfo->file($filename);
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif' ,..... ];
 これで終わったと思ったら、まだ先がありました。
(3)ステガノグラフィの対策
 GDライブラリを用いた画像の再作成で、
 imagecreatefrom*** ***=jpeg/png/gif
画像内に隠された悪意ある文字列やスクリプトを無効化する。
(4)Polyglotファイルの場合、GDライブラリの処理をすり抜ける巧妙な手法が存在すると言う事で
 最後に.htaccess(禁止はPHPだけではありません)を設置し、終わりにしました。
更新日 2026-06-26
検索


OR検索AND検索
検索方法の違い


更新履歴
追加・更新されたブロックの内容を自動的に表示しています。
メニュー
このサイトは
XOOPSのブロック管理の考え方を参考にして作った自作ツールで作成しています。

このサイトは、全ページどのページからでもリンクフリーです。
このサイトは
 2023/1/6から、このサイトを「パソコンよろず攻防」から「趣味のPHP」に変更しました。過去の記事に現れる、パソコンよろず攻防の文言はそのままにしてあります。
PHPのバージョンアップ
PHPマニュアルから抜粋しています。
随時変更されるので、最新状態の確認は、こちらから

  • PHP 8.4.x から PHP 8.5.x への移行

  • PHP 8.3.x から PHP 8.4.x への移行

  • PHP 8.2.x から PHP 8.3.x への移行

  • PHP 8.1.x から PHP 8.2.x への移行

  • PHP 8.0.x から PHP 8.1.x への移行


  • 更新日 2026-02-10