Imagicickは、ImageMagickライブラリを使用して画像を作成および変更するためのPHP拡張機能です。 HHVMが利用できるImagicickのバージョンもあります。 2つの拡張機能はAPIでほとんど互換性があり、どちらもImageMagickライブラリを呼び出しますが、2つの拡張機能は完全に個別のコードベースです。
バグはhttps://bugs.php.netでも報告できますが、応答時間が遅い場合があります。
ImagicICKをインストールする最良の方法は、Apt、Yum、Brewなどのパッケージマネージャーを介して、ImageMagickもインストールします。
SourceからImagicickをコンパイルする必要がある場合は、最初にImageMagickをインストールする必要があります。少なくともバージョン6.2.4は、多くのバグ修正のため、より最近のバージョンを使用することを強くお勧めします。
ImageMagickがインストールされると、次のコマンドがImagICKをコンパイルしてインストールします。
git clone https://github.com/Imagick/imagick
cd imagick
phpize && ./configure
make
make install
また、PHPを拡張機能にロードするには、 extension=imagick.so php iniファイルに追加する必要があります。
Windowsについては、Imagicickと基礎となるImagemagickライブラリの両方をインストールしてください。
コンパイルされたら、Imagicicはコンパイルされた同じバージョンのImageMagickで実行する必要があります。 ImageMagickの異なるバージョンに対して実行されることは、安定性の問題を引き起こすことが知られているため、推奨されたりサポートされたりしません。
nixosでImagicickを使用する場合は、おそらくFontconfig_fileを定義して、フォントをロードするときに警告メッセージを避け、magick_configure_pathをimagick :: getConfigureOptions()からすべての情報を入手できるようにします。
ライブラリのほとんどすべての機能には、www.phpimagick.comに例があり、機能を呼び出すコードと生成された画像または出力を見ることができます。
ImageMagickは、Imagick拡張がPHPにさらされたライブラリであり、多くの画像腐敗の問題を修正した多くのバグ修正がありました。可能であれば、最新バージョン(6.9.1または7.xを超える)にアップグレードすることを強くお勧めします。
PHP拡張機能は、ImageMagickライブラリを呼び出すことで機能します。 ImageMagickの開発者は、バグを避けることに注意してください。いくつかのバグがコードに存在することは避けられません。 ImageMagickは、多くのサードパーティライブラリを使用して、ファイルを開き、読み取り、操作します。これらのライブラリの作家は、コードを書くときにも注意します。しかし、誰もが間違いを犯し、必然的にいくつかのバグが存在するでしょう。
ImageMagickは画像の処理に使用されるため、ハッカーがこれらのバグを悪用しようとする無効なデータを含む画像を作成することは明らかに可能です。このため、次のことをお勧めします。
これを行うと、ハッカーがImageMagickが使用しているライブラリに存在する場合、ハッカーがバグを悪用することがより困難になります。
非常に低い特権プロセスとして実行します。可能な限り、Imagickが呼び出されるPHPスクリプトにアクセスできるファイルとシステムリソースはロックダウンする必要があります。
すべての画像ファイルが、処理のためにImageMagickに送信する前にサポートする画像ファイルタイプに対応する予想される「マジックバイト」から始まることを確認します。これは、finfo_file()で行われます - 以下を参照してください。
ユーザーに表示する前に、画像処理の結果が有効な画像ファイルであることを確認してください。非常にありそうもないイベントでは、ハッカーが任意のファイルをImagicickの出力にパイプ化できるというイベントで、それが送信されているアプリケーションのソースコードではなく、画像ファイルであることを確認することは賢明な予防策です。これは、次のコードで達成できます。
<?php
$ finfo = finfo_open ( FILEINFO_MIME_TYPE );
$ mimeType = finfo_file ( $ finfo , $ filename );
$ allowedMimeTypes = [
' image/gif ' ,
' image/jpeg ' ,
' image/jpg ' ,
' image/png '
];
if ( in_array ( $ mimeType , $ allowedMimeTypes ) == false ) {
throw new SecurityException ( " Was going to send file ' $ filename ' to the user, but it is not an image file. " );
}これらの推奨事項はセキュリティを保証するものではありませんが、Imagic/Imagemagick関連のセキュリティ問題への露出を制限する必要があります。
ImageMagickには、オープンマルチプロセスAPIを使用して、複数のスレッドを使用して画像を一度に処理できるようにする機能があります。 OpenMPのいくつかの実装は、特定の環境で使用されている場合に安定性の問題があることが知られています。
次のいずれかを行うことをお勧めします。
コンパイルフラグ「-disable-openmp」セットでコンパイルフラグでコンパイルして、ImageMagickのOpenMPサポートを無効にします。
Imagick::setResourceLimit(Imagick::RESOURCETYPE_THREAD, 1);またはImagick::setResourceLimit(6, 1); ImagicickのバージョンにResourceType_Thread定数が含まれていない場合。
ImageMagick 'policy.xmlファイルのスレッドリソース制限を<policy domain="resource" name="thread" value="1"/>このファイルは、/etc/imagemagick-6/policy.xmlまたは同様の場所にある可能性があります。
ImageMagickがImagicickを通じて呼び出されたときにOpenMPを使用したい場合は、サーバーで正しく動作することを徹底的にテストする必要があります。
ドキュメントには多くの作業が必要です。ここにオンラインエディターがあります:https://edit.php.net/貢献は大歓迎です。
基礎となるImageMagick Libraryの正確なバージョンの変更については、http://abi-laboratory.pro/tracker/timeline/imagemagick/を参照してください。