Imagick adalah ekstensi PHP untuk membuat dan memodifikasi gambar menggunakan pustaka ImageMagick. Ada juga versi imagick yang tersedia untuk HHVM. Meskipun kedua ekstensi sebagian besar kompatibel dalam API mereka, dan mereka berdua menyebut perpustakaan Imagemagick, kedua ekstensi tersebut benar-benar terpisah.
Bug juga dapat dilaporkan di https://bugs.php.net tetapi mungkin memiliki waktu respons yang lebih lambat.
Cara terbaik untuk menginstal Imagick adalah melalui manajer paket misalnya apt, yum, brew, karena mereka juga akan menginstal Imagemagick untuk Anda.
Jika Anda perlu mengkompilasi imagick dari sumber, pertama -tama Anda harus menginstal ImageMagick, setidaknya versi 6.2.4 tetapi sangat disarankan untuk menggunakan versi yang lebih baru karena banyak perbaikan bug di dalamnya.
Setelah Imagemagick diinstal, perintah berikut akan mengkompilasi dan menginstal Imagick:
git clone https://github.com/Imagick/imagick
cd imagick
phpize && ./configure
make
make install
Anda juga perlu menambahkan extension=imagick.so ke file php ini Anda untuk membuat php memuat ekstensi.
Untuk windows, silakan instal Imagick dan perpustakaan Imagemagick yang mendasari dari:
Setelah dikompilasi, Imagick harus dijalankan dengan versi Imagemagick yang sama dengan yang dikompilasi. Berlari melawan versi Imagemagick yang berbeda diketahui menyebabkan masalah stabilitas, dan karenanya tidak direkomendasikan atau didukung.
Jika menggunakan Imagick di Nixos, Anda mungkin ingin mendefinisikan fontconfig_file untuk menghindari pesan peringatan saat memuat font, dan magick_configure_path untuk memiliki semua informasi yang tersedia dari Imagick :: getConfigureOptions ().
Hampir semua fungsi di perpustakaan memiliki contoh di www.phpimagick.com, di mana Anda dapat melihat kode contoh untuk memanggil fungsi, serta gambar atau output yang dihasilkan.
Imagemagick, perpustakaan yang terpapar ekstensi imagick ke PHP telah memiliki banyak perbaikan bug, yang telah memperbaiki banyak masalah korupsi gambar. Kami sangat merekomendasikan peningkatan ke versi terbaru (lebih dari 6.9.1 atau 7.x) jika memungkinkan.
PHP Extension Imagick bekerja dengan memanggil perpustakaan Imagemagick. Meskipun pengembang Imagemagick berhati -hati dalam menghindari bug, tidak dapat dihindari bahwa beberapa bug akan hadir dalam kode. Imagemagick juga menggunakan banyak perpustakaan pihak ketiga untuk membuka, membaca, dan memanipulasi file. Para penulis perpustakaan ini juga berhati -hati saat menulis kode mereka. Namun semua orang membuat kesalahan dan pasti akan ada beberapa bug yang ada.
Karena Imagemagick digunakan untuk memproses gambar, mungkin saja peretas membuat gambar yang berisi data tidak valid untuk mencoba mengeksploitasi bug ini. Karena ini kami merekomendasikan yang berikut:
Melakukan hal ini akan membuat lebih sulit bagi peretas untuk mengeksploitasi bug, jika seseorang harus ada di perpustakaan yang digunakan Imagemagick.
Jalankan sebagai proses istimewa yang sangat rendah. Sebanyak mungkin file dan sumber daya sistem dapat diakses oleh skrip PHP yang dipanggil oleh Imagick harus dikunci.
Pastikan semua file gambar dimulai dengan "byte ajaib" yang diharapkan sesuai dengan jenis file gambar yang Anda dukung sebelum mengirimnya ke ImageMagick untuk diproses. Ini dilakukan dengan finfo_file () - lihat di bawah.
Periksa hasil pemrosesan gambar adalah file gambar yang valid sebelum menampilkannya kepada pengguna. Dalam hal yang sangat tidak mungkin bahwa seorang peretas dapat menyalurkan file sewenang -wenang ke output Imagick, memeriksa bahwa itu adalah file gambar, dan bukan kode sumber aplikasi Anda yang sedang dikirim, adalah tindakan pencegahan yang masuk akal. Ini dapat dicapai dengan kode berikut:
<?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. " );
}Rekomendasi ini tidak menjamin keamanan apa pun, tetapi mereka harus membatasi paparan Anda terhadap masalah keamanan terkait Imagick/Imagemagick.
Imagemagick memiliki kemampuan untuk menggunakan API multi-pemrosesan terbuka untuk dapat menggunakan banyak utas untuk memproses gambar sekaligus. Beberapa implementasi OpenMP diketahui memiliki masalah stabilitas ketika digunakan di lingkungan tertentu.
Kami merekomendasikan melakukan salah satu dari yang berikut:
Menonaktifkan dukungan OpenMP di Imagemagick dengan mengkompilasinya dengan bendera kompilasi "-yang dapat dibuka-terbuka".
Nonaktifkan penggunaan utas di ImageMagick melalui Imagick dengan menelepon: Imagick::setResourceLimit(Imagick::RESOURCETYPE_THREAD, 1); atau Imagick::setResourceLimit(6, 1); Jika Versi Imagick Anda tidak mengandung konstanta Resourcetype_Thread.
Nonaktifkan penggunaan utas di ImageMagick dengan mengatur batas sumber daya utas dalam file kebijakan.xml Imagemagick dengan <policy domain="resource" name="thread" value="1"/> File ini mungkin terletak di /etc/imagemagick-6/policy.xml atau lokasi yang sama.
Jika Anda ingin menggunakan OpenMP di Imagemagick ketika dipanggil melalui Imagick, Anda harus menguji secara menyeluruh bahwa itu berperilaku dengan benar di server Anda.
Dokumentasi membutuhkan banyak pekerjaan. Ada editor online di sini: https://edit.php.net/ Kontribusi lebih dari disambut.
Silakan merujuk ke http://abi-laboratory.pro/tracker/timeline/imagemagick/ untuk perubahan versi yang tepat dari perpustakaan Imagemagick yang mendasarinya.