Imagick은 Imagemagick 라이브러리를 사용하여 이미지를 만들고 수정하기위한 PHP 확장자입니다. HHVM에서 사용할 수있는 Imagick 버전도 있습니다. 두 개의 확장은 대부분 API에서 호환 가능하지만 둘 다 imagemagick 라이브러리를 호출하지만 두 확장은 완전히 별도의 코드베이스입니다.
버그는 https://bugs.php.net에서도보고 할 수 있지만 응답 시간이 느려질 수 있습니다.
Imagick을 설치하는 가장 좋은 방법은 패키지 매니저, 예, Yum, Brew를 통한 것입니다.
Source에서 Imagick을 컴파일 해야하는 경우 먼저 Version 6.2.4 이상 ImageMagick을 설치해야하지만 많은 버그 수정으로 인해 최신 버전을 사용하는 것이 좋습니다.
Imagemagick이 설치되면 다음 명령이 Imagick을 컴파일하고 설치합니다.
git clone https://github.com/Imagick/imagick
cd imagick
phpize && ./configure
make
make install
또한 PHP를 연장을로드하기 위해 extension=imagick.so 추가해야합니다.
Windows의 경우 Imagick과 기본 Imagemagick 라이브러리를 모두 설치하십시오.
일단 컴파일되면 Imagick은 동일한 버전의 Imagemagick과 함께 실행되어야합니다. 다른 버전의 Imagemagick에 대항하는 것은 안정성 문제를 일으키는 것으로 알려져 있으므로 권장하거나 지원되지 않습니다.
Nixos에서 Imagick을 사용하는 경우 글꼴을로드 할 때 경고 메시지를 피하기 위해 FontConfig_file을 정의하고 Magick_Configure_Path를 사용하여 imagick :: getConfigureOptions ()에서 모든 정보를 사용할 수 있습니다.
라이브러리의 거의 모든 기능에는 www.phpimagick.com의 예제가 있습니다. 여기서 예제 코드를 볼 수 있으며 기능을 호출 할 수 있습니다.
Imagick Extension이 PHP에 노출 된 도서관 인 Imagemagick에는 많은 이미지 손상 문제가 해결 된 많은 버그 수정이있었습니다. 가능한 경우 최신 버전 (6.9.1 또는 7.x 이상)으로 업그레이드하는 것이 좋습니다 .
PHP Extension Imagick은 Imagemagick 라이브러리를 호출하여 작동합니다. Imagemagick 개발자는 버그를 피할 때 잘주의를 기울이지 만 일부 버그가 코드에 존재하는 것은 불가피합니다. Imagemagick은 또한 많은 타사 라이브러리를 사용하여 파일을 열고 읽고 조작합니다. 이 도서관의 작가들도 코드를 작성할 때도주의를 기울입니다. 그러나 모든 사람이 실수를 저지르고 필연적으로 몇 가지 버그가있을 것입니다.
Imagemagick은 이미지를 처리하는 데 사용되기 때문에 해커는 이러한 버그를 악용하려는 잘못된 데이터가 포함 된 이미지를 만들 수 있습니다. 이 때문에 다음을 권장합니다.
이렇게하면 해커가 버그를 악용하기가 더 어려워 질 수 있습니다. Imagemagick가 사용하는 라이브러리에 존재 해야하는 경우 버그를 악용 할 수 있습니다.
매우 낮은 권한있는 프로세스로 실행하십시오. imagick이 호출되는 PHP 스크립트에 액세스 할 수있는 파일 및 시스템 리소스를 최대한 활용해야합니다.
모든 이미지 파일이 처리를 위해 Imagemagick로 보내기 전에 지원하는 이미지 파일 유형에 해당하는 "Magic Bytes"로 시작하는지 확인하십시오. 이것은 finfo_file ()로 수행됩니다 - 아래를 참조하십시오.
이미지 처리 결과는 사용자에게 표시하기 전에 유효한 이미지 파일인지 확인하십시오. 해커가 임의의 파일을 Imagick의 출력에 파이프 할 수있는 극도로 가능성이 거의없는 이벤트에서, 전송되는 응용 프로그램의 소스 코드가 아닌 이미지 파일인지 확인하는 것은 합리적인 예방 조치입니다. 이것은 다음 코드로 달성 할 수 있습니다.
<?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. " );
}이러한 권장 사항은 보안을 보장하지는 않지만 Imagick/Imagemagick 관련 보안 문제에 대한 노출을 제한해야합니다.
Imagemagick은 열린 다중 처리 API를 사용하여 여러 스레드를 사용하여 이미지를 한 번에 처리 할 수 있습니다. OpenMP의 일부 구현은 특정 환경에서 사용될 때 안정성 문제가있는 것으로 알려져 있습니다.
다음 중 하나를 사용하는 것이 좋습니다.
컴파일 플래그 "-disable-openmp"세트로 컴파일하여 OpenMP 지원을 비활성화합니다.
Imagick::setResourceLimit(Imagick::RESOURCETYPE_THREAD, 1); 또는 Imagick::setResourceLimit(6, 1); Imagick 버전에 Resourcetype_thread 상수가 포함되어 있지 않은 경우.
<policy domain="resource" name="thread" value="1"/> imagemagick 'policy.xml 파일에서 스레드 자원 제한을 설정하여 imagemagick에서 스레드 사용을 비활성화 할 수 있습니다.이 파일은 /etc/imagemagick-6/policy.xml 또는 이와 유사한 위치에있을 수 있습니다.
ImageMagick에서 OpenMP가 Imagick을 통해 호출 될 때 OpenMP를 사용하려면 서버에서 올바르게 작동하는지 철저히 테스트해야합니다.
문서에는 많은 작업이 필요합니다. 여기에는 온라인 편집자가 있습니다 : https://edit.php.net/ 기부금은 환영합니다.
기본 Imagemagick 라이브러리의 정확한 버전 변경은 http://abi-laboratory.pro/tracker/timeline/imagemagick/을 참조하십시오.