画像アップロードに於けるセキュリティ対策
2017年9月12日Security Tips, テクニカル, トピックス, ノウハウ
WEBサイトのセキュリティ対策の中でも重要なのが画像のアップロード時の不正対策だ。最も行われている攻撃は画像のファイルのメタ情報に不正コードを埋め込んで、後から復元&実行を穴のあるプログラムコードに混ぜて処理させファイル改竄に持ってゆくというものだ。この手法は古くからある手法だが残念ながら今でも十分有効な攻撃手法です。
画像ファイルアップロードで考慮すべきこと
- ファイルのアップロードデータをドキュメントルートの外フォルダへ配置する。移動ではなく保存先を最初から外部にする。
- ファイルのファイル名をオリジナルでは無いランダムなベースファイル名にする。
- アップロードした画像の中身が本当に画像ファイルなのか検査する。プログラムなのに拡張子が画像拡張子の場合を検査
- アップロードした画像の中にあるメタインフォに不正コードを含まれてしまう可能性があるのでexiftoolで削除する
- Google captchaなどを使用してバッチ処理の攻撃を防ぐ
- ファイルの格納は1種類に統一する。仮に画像種別が複数あっても保存時に変換する。変換するとメタ情報が消去される。
- 画像ファイルのアップロードできるサイズを規定し必要以上の大きなサイズでメモリ圧迫を避ける。
exiftoolを導入
元々はexiftoolの目的は画像のメタ情報(撮影時の機種、タイムスタンプ、画像のタイプ、場所などの付帯情報)を編集するツールです。このソフトはオープンソースなのでダウンロードしてどんなプラットフォームでも利用が可能です。それではLinux(CentOS6,7)などで利用する場合について解説していきたいと思います。
ダウンロードしたら適用なディレクトリに配置して解凍します。
1 2 3 4 5 |
# tar xvfz Image-ExifTool10.6.1.tar.gz # cd Image-ExifTool-10.61 # perl Makefile.PL # make test # make install |
もしMakeする際にエラーが出るとしたら、perlモジュールが足りないため発生する可能性はあります。その場合はcpanをyumでインストールし cpanツール起動しライブラリーをインストールしてください。「cpan[1]> install ExtUtils::MakeMaker」
exiftoolでメタ情報を除去
気をつける点は”-all= *.jpg”の”=”の後は半角1個分のスペースの後に画像ファイル名を指定しないとエラーになる。またデフォルトで変換前のファイルはoriginalという名前が付加され残ります。残すと危険なので削除を最後に実施します。
1 2 3 4 5 6 7 |
# exiftool -all= *.jpg # ls -l -rwxr-xr-x 1 root root 3670566 Sep 12 11:39 item01.jpg -rwxr-xr-x 1 root root 3718803 Sep 12 11:25 item01.jpg_original -rwxr-xr-x 1 root root 3351844 Sep 12 11:40 item02.jpg -rwxr-xr-x 1 root root 3391490 Sep 12 11:25 item02.jpg_original # rm -f *original |
画像変換にImageMagickを使う。
1 2 3 |
# yum install ImageMagick # yum install ImageMagick-devel # convert item01.png -quality 100 item01.jpg |
GoogleのreCaptchaで投稿を安全にする(連続投稿のブロック)
簡単に設置できるので試してください。「私はロボットではありません」のボックスが表示されます。