PHPでのファイルアップロードに関するメモ

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

上記の本を読んで、参考になったのでメモして置きます。

容量制限

  • 下記の設定項目を確認し、可能な限り小さな値にしておく。

php.iniのファイルアップロードに関する設定項目

項目 意味 デフォルト
file_uploads ファイルアップロードの機能利用可能か ON
upload_max_filesize ファイル当たりの最大容量 2MB
max_file_uploads 送信できるファイル数の上限 20
post_max_size POSTリクエストのボディサイズの上限 8MB
memory_limit スクリプトが確保できる最大メモリのバイト数 128MB

(表は本の内容をそのまま引用してあります。)

ファイルアップロード時の対策

  • 拡張子が許可されたものかチェックする。
  • 画像の場合はマジックバイトも確認する。

ファイルダウンロード時の対策

  • Content-Typeを正しく設定する
  • 画像の拡張子と中身が対応している事を確認する。
  • ダウンロードを想定したファイルにはレスポンスヘッダとしてContent-Disposition:attachmentを指定する。