Aplikasi PHP memiliki reputasi untuk masalah keamanan yang lebih tinggi dari rata-rata. Teknik konfigurasi apa yang Anda gunakan untuk memastikan aplikasi seaman mungkin?
Saya mencari ide-ide seperti:
- Menggunakan Hardened PHP / Suhosin
- Menggunakan mod_security
- Menonaktifkan register_globals dan allow_url_fopen di php.ini
Saya biasanya menggunakan Linux, tetapi jangan ragu untuk menyarankan solusi Windows juga.
sumber
Dalam pengalaman saya, sebagian besar kerentanan pada situs web berbasis PHP adalah hasil dari desain (situs) yang buruk, bukan kelemahan dalam PHP itu sendiri.
Beberapa kiat cepat:
* Anda juga dapat mengintip posting singkat yang saya tulis berjudul "Mengamankan phpinfo (), semacam" dan pastikan untuk membaca komentar http://egovsergo.com/2009/04/03/protecting-your-phpinfo/ Itu adalah ide cepat saya harus (agak) melindungi phpinfo () jika saya entah bagaimana menghapusnya di situs produksi.
Dalam cara yang lebih umum, beberapa pengembang menulis pembungkus untuk fungsi sensitif yang memeriksa apakah bendera "situs produksi" diatur atau tidak, dan menonaktifkan fungsi sensitif dalam produksi.
sumber
Parameter lain yang harus diubah untuk mengeraskan PHP:
Simpan semua kesalahan PHP di file /var/log/phperror.log :
sumber
Saya telah menambahkan repositori dotdeb ke /etc/apt/sources.lst saya
Karena mereka menambal php / apache / mysql lebih sering daripada Debian.
sumber
Pertimbangkan pengaturan
open_basedir
berdasarkan "per situs".open_basedir
adalah pengaturan php.ini yang akan mencegah skrip Anda mengakses file di luar daftar putih yang ditentukan. Jika server Anda meng-host beberapa situs, itu akan mencegah satu situs dari membaca pengaturan database dari situs lain. Ini juga akan mencegah skrip php dari mengakses / memodifikasi file sistem inti. Open basedir mudah diatur, cukup tambahkan baris "php_admin_value open_basedir /my/list/of/folders:/as/a/colon/seperated/list
" ke setiap vhost Apache.Juga pertimbangkan mematikan mesin skrip PHP untuk semua situs / folder yang tidak boleh berisi skrip PHP (misalnya folder gambar yang diunggah). Sekali lagi, ini sederhana, tambahkan "php_admin_value engine off" ke Apache VirtualHosts yang tidak memerlukan php. Untuk menonaktifkan PHP di direktori, masukkan hal yang sama ke tag Direktori.
Jalankan izin file seketat mungkin, hindari akses tulis ke skrip PHP untuk pengguna Apache, ini mencegah skrip yang berjalan dari memodifikasi sendiri atau skrip lain di situs / server yang sama. Hindari 777 izin jika memungkinkan, cari tahu izin minimum yang diperlukan untuk menjalankan aplikasi dan menggunakannya.
Jika Anda meng-hosting beberapa situs, masing-masing dengan database sendiri, gunakan pengguna MySQL / Postgres yang terpisah untuk masing-masing, dan atur izin pada setiap pengguna sehingga mereka hanya memiliki akses ke database yang relevan. Sekali lagi ini akan mencegah skrip nakal merusak database aplikasi lain.
Suosin, HardenedPHP, mod_security dan sejenisnya juga sangat berharga, tetapi menggunakannya sebagai tambahan untuk konfigurasi yang dikunci dengan ketat, bukan sebagai ganti.
sumber
Suhosin memiliki biaya kinerja yang cukup besar, sehingga komentar "tidak ada biaya" agak tidak berarti.
sumber
Apakah Anda mencari beberapa saran dasar firewall / topologi? Saya suka ide menggunakan hal-hal seperti pound untuk mencegah akses langsung ke server web PHP dari internet yang tidak dicuci. Dengan begitu Anda juga dapat memisahkan server web dari bagian lain jaringan Anda juga.
sumber
Menggunakan Suhosin / mod_security / SuPHP tentu akan membuat server PHP Anda aman. Menonaktifkan fungsi-fungsi tertentu seperti exec, passthru, sistem dan escapeshellcmd akan banyak membantu juga.
sumber