PHPで画像処理する際に使用する拡張モジュール Imagick を使用するにあたり、ImageMagickの脆弱性が気になるところ。画像ファイルをアップロードするような機能を実装する場合のセキュリティ対策を考えます。
ImageMagickのバージョン
ImageMagickのバージョンをチェックします。(asof 2021/7)
code$ convert --version
エックスサーバー
PHP 7.3, PHP 7.4, PHP 8.0
ImageMagick version: ImageMagick 6.9.10-68
コアサーバー
PHP 7.4 (PHP 8.0 ではImagick使用できない)
ImageMagick version: ImageMagick 6.9.11-60
※Imagickの追加が必要
例)/public_html/.fast-cgi-bin/php74.ini; see. https://help.coreserver.jp/faq/
extension_dir = "/usr/local/lib/php/extensions/"
extension = "php74_imagick.so"
ImageMagick サポートされているファイル形式
画像情報を取得できるコマンド identify を使って 、サポートされているファイル形式を取得できます。
コマンド$ identify -list format
ポリシーによるセキュリティー対策
ImageMagickのセキュリティーポリシーファイルにより、トランスコードする画像形式を絞りこみます。
~/.config/ImageMagick/policy.xml<policymap>
<policy domain="delegate" rights="none" pattern="*" />
<policy domain="filter" rights="none" pattern="*" />
<policy domain="coder" rights="none" pattern="*" />
<policy domain="coder" rights="read|write" pattern="{PNG,JPEG,JPG,GIF,WEBP}" />
</policymap>
反映を確認します。
ポリシー確認$ identify -list policy
Path: /path/to/.config/ImageMagick/policy.xml
Policy: Delegate
rights: None
pattern: *
Policy: Filter
rights: None
pattern: *
Policy: Coder
rights: None
pattern: *
Policy: Coder
rights: Read Write
pattern: {PNG,JPEG,JPG,GIF,WEBP}
Path: [built-in]
Policy: Undefined
rights: None
Webアプリで独自のポリシーを適用したい場合は、環境変数が使用できます。
https://www.imagemagick.org/script/resources.php#environment
プログラムによるセキュリティ対策
ポリシーによる画像フォーマットの絞り込みは、紐づくフォーマットも可能になるような緩さがあるので、プログラムでもImageMagickでの処理前にチェックします。
❧ ❧ ❧
その他
現在のリソースを確認するには、こちら。
現在の設定確認$ identify -list resource
[PR]