最近の、別の記事を探す
【タイトル】
画像偽装の対策
【キーワード】
画像偽装,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