PHP adalah bahasa skrip sisi server sumber terbuka, dan digunakan secara luas. Server web Apache / Nginx / Lighttpd menyediakan akses ke file dan konten melalui protokol HTTP ATAU HTTPS. Bahasa skrip sisi server yang salah dikonfigurasi dapat menimbulkan berbagai macam masalah. Jadi, PHP harus digunakan dengan hati-hati. Berikut adalah dua puluh lima praktik terbaik keamanan php untuk sysadmin Linux dan Unix untuk mengkonfigurasi PHP dengan aman.
Praktik terbaik keamanan PHP
Contoh kiat keamanan untuk kesiapan PHP
- DocumentRoot: / var / www / html
- Server Web default: Apache (Anda dapat menggunakan Lighttpd atau Nginx sebagai ganti Apache)
- File konfigurasi PHP default: /etc/php.ini atau /etc/php/7.0/fpm/php.ini
- Direktori konfigurasi ekstensi PHP default: /etc/php.d/ ATAU /etc/php/7.0/fpm/conf.d/
- Contoh file konfigurasi keamanan php kami: /etc/php.d/security.ini ATAU /etc/php/7.0/fpm/conf.d/99-security.conf (Anda perlu membuat file ini menggunakan editor teks)
- Sistem operasi: RHEL / CentOS / Fedora Linux (instruksi harus bekerja dengan distribusi Linux lain seperti Debian / Ubuntu atau sistem operasi serupa Unix seperti OpenBSD / FreeBSD / HP-UX ).
- Port TCP / UDP server PHP default: none
Mari kita lihat beberapa teknis dilapangan untuk keamanan php.
1. Kenali Musuh Anda
Aplikasi berbasis PHP dapat menghadapi berbagai jenis serangan. Saya telah memperhatikan berbagai jenis serangan:
- XSS - Skrip lintas situs adalah kerentanan dalam aplikasi web php, yang dapat dimanfaatkan oleh penyerang untuk mencuri informasi pengguna. Anda dapat mengkonfigurasi Apache dan menulis skrip PHP yang lebih aman (memvalidasi semua input pengguna) untuk menghindari serangan xss.
- Injeksi SQL - Ini adalah kerentanan dalam lapisan database aplikasi php. Ketika input pengguna disaring dengan tidak benar, pernyataan SQL apa pun dapat dijalankan oleh aplikasi. Anda
dapat mengkonfigurasi Apache dan menulis kode aman (memvalidasi dan
meng-escape semua input pengguna) untuk menghindari serangan injeksi
SQL. Praktik umum di PHP adalah melarikan diri parameter menggunakan fungsi yang disebut mysql_real_escape_string () sebelum mengirim kueri SQL.
Spoofing - Unggah file - Ini memungkinkan pengunjung Anda untuk menempatkan file (mengunggah file) di server Anda. Hal ini dapat mengakibatkan berbagai masalah keamanan seperti menghapus file Anda, menghapus database, mendapatkan detail pengguna, dan banyak lagi. Anda dapat menonaktifkan pengunggahan file menggunakan php atau menulis kode aman (seperti memvalidasi input pengguna dan hanya mengizinkan jenis file gambar seperti png atau gif).
- Termasuk file lokal dan jarak jauh - Penyerang dapat membuka file dari server jarak jauh dan menjalankan kode PHP apa pun. Ini memungkinkan mereka untuk mengupload file, menghapus file dan menginstal backdoors. Anda dapat mengkonfigurasi php untuk menonaktifkan eksekusi file jarak jauh.
- eval () - Evaluasi string sebagai kode PHP. Ini sering digunakan oleh penyerang untuk menyembunyikan kode dan alat mereka di server itu sendiri. Anda dapat mengkonfigurasi php untuk menonaktifkan eval ().
- Sea-surf Attack
(Cross-site request forgery - CSRF) - Serangan ini memaksa
pengguna akhir untuk melakukan tindakan yang tidak diinginkan pada
aplikasi web di mana dia saat ini diautentikasi. Eksploitasi CSRF yang berhasil dapat membahayakan data dan operasi pengguna akhir jika digunakan oleh pengguna biasa. Jika pengguna akhir yang ditargetkan adalah akun administrator, ini dapat membahayakan seluruh aplikasi web.
2. Temukan Modul PHP Built-in
Untuk melihat kumpulan modul PHP yang dikompilasi, ketik perintah berikut:
# php -m
Contoh keluaran:[Modul PHP] apc bcmath bz2 kalender Inti ctype keriting tanggal dom ereg exif fileinfo Saring ftp gd gettext gmp hash iconv imap json libxml mbstring.dll memcache mysql.dll mysqli.dll openssl pcntl pcre PDO pdo_mysql pdo_sqlite Phar readline Refleksi sidang shmop SimpleXML soket SPL sqlite3 standar suhosin tokenizer wddx xml xmlreader xmlrpc xmlwriter xsl zip zlib [Modul Zend] Suhosin
Saya merekomendasikan agar Anda menggunakan PHP dengan modul yang dikurangi untuk kinerja dan keamanan. Misalnya, Anda dapat menonaktifkan modul sqlite3 dengan menghapus (menghapus) file konfigurasi , ATAU mengganti nama (memindahkan) file bernama /etc/php.d/sqlite3.ini sebagai berikut: ATAU Modul terkompilasi lainnya hanya dapat dihapus dengan menginstal ulang PHP dengan konfigurasi yang dikurangi. Anda dapat mengunduh kode sumber php dari php.net dan mengkompilasinya sebagai berikut dengan dukungan GD, fastcgi, dan MySQL:
# rm /etc/php.d/sqlite3.ini
# mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disable3. Batasi Kebocoran Informasi PHP
Untuk membatasi kebocoran informasi PHP nonaktifkan expose_php. Edit /etc/php.d/secutity.ini dan atur direktif berikut:
expose_php=Off
Saat diaktifkan, expose_php melaporkan kepada dunia bahwa PHP diinstal pada server, yang menyertakan versi PHP dalam header HTTP (misalnya,
X-Powered-By: PHP / 5.3.3). Panduan logo PHP (lihat contoh ) juga ditampilkan, sehingga menambahkannya ke URL situs berkemampuan PHP akan menampilkan logo yang sesuai. Ketika expose_php diaktifkan, Anda dapat melihat versi php menggunakan perintah berikut:4. Minimalkan Modul PHP yang Dapat Dimuat (Ekstensi Dinamis)
PHP mendukung "Ekstensi Dinamis". Secara default, RHEL memuat semua modul ekstensi yang ditemukan di direktori /etc/php.d/. Untuk mengaktifkan atau menonaktifkan modul tertentu, cukup temukan file konfigurasi di direktori /etc/php.d/ dan beri komentar nama modul. Anda juga dapat mengganti nama atau menghapus file konfigurasi modul. Untuk kinerja dan keamanan PHP terbaik, Anda sebaiknya hanya mengaktifkan ekstensi yang dibutuhkan aplikasi web Anda. Misalnya, untuk menonaktifkan ekstensi gd, ketik perintah berikut: Untuk mengaktifkan modul php bernama gd, masukkan:5. Catat Semua Kesalahan PHP
Jangan tampilkan pesan kesalahan PHP ke semua pengunjung situs. Edit /etc/php.d/security.ini dan atur direktif berikut:
6. Larang Mengupload File
Edit /etc/php.d/security.ini dan setel perintah berikut untuk menonaktifkan pengunggahan file demi alasan keamanan:
7. Matikan Eksekusi Kode Jarak Jauh
Jika diaktifkan, allow_url_fopen memungkinkan fungsi file PHP - seperti file_get_contents () dan pernyataan include dan require - dapat mengambil data dari lokasi jarak jauh, seperti FTP atau situs web.
The allow_url_fopen pilihan memungkinkan file PHP ini fungsi - seperti file_get_contents () dan termasuk dan memerlukan pernyataan - dapat mengambil data dari lokasi terpencil menggunakan ftp atau http protokol. Pemrogram sering kali melupakan ini dan tidak melakukan pemfilteran input yang tepat saat meneruskan data yang disediakan pengguna ke fungsi ini, sehingga menyebabkan kerentanan injeksi kode . Sejumlah besar kerentanan injeksi kode yang dilaporkan dalam aplikasi web berbasis PHP disebabkan oleh kombinasi pengaktifan allow_url_fopen dan pemfilteran input yang buruk. Edit /etc/php.d/security.ini dan atur direktif berikut:
8. Aktifkan Mode Aman SQL
Edit /etc/php.d/security.ini dan atur direktif berikut:
Jika ternyata On, mysql_connect () dan mysql_pconnect () mengabaikan argumen dilewatkan ke mereka. Harap dicatat bahwa Anda mungkin harus membuat beberapa perubahan pada kode Anda. Aplikasi pihak ketiga dan open source seperti WordPress, dan lainnya mungkin tidak berfungsi sama sekali ketika sql.safe_mode diaktifkan. Saya juga menyarankan Anda untuk mematikan magic_quotes_gpc untuk semua instalasi php 5.3.x karena pemfilterannya tidak efektif dan tidak terlalu kuat. mysql_escape_string () dan fungsi pemfilteran kustom melayani tujuan yang lebih baik:
9. Kontrol Ukuran POST
Metode permintaan HTTP POST digunakan ketika klien (browser atau pengguna) perlu mengirim data ke server web Apache sebagai bagian dari permintaan, seperti saat mengunggah file atau mengirimkan formulir yang telah diisi. Penyerang mungkin mencoba mengirim permintaan POST yang sangat besar untuk memakan sumber daya sistem Anda. Anda dapat membatasi permintaan POST ukuran maksimum yang akan diproses PHP. Edit /etc/php.d/security.ini dan atur direktif berikut:
1K menetapkan ukuran maksimal data posting yang diizinkan oleh aplikasi php. Pengaturan ini juga mempengaruhi upload file. Untuk mengupload file besar, nilai ini harus lebih besar dari upload_max_filesize. Saya juga menyarankan agar Anda membatasi metode yang tersedia menggunakan server web Apache. Edit, httpd.conf dan atur petunjuk berikut untuk DocumentRoot / var / www / html:
10. Kontrol Sumber Daya (Kontrol DoS)
Anda dapat mengatur waktu eksekusi maksimum setiap skrip php , dalam hitungan detik. Opsi rekomendasi lainnya adalah menyetel jumlah waktu maksimum yang mungkin dihabiskan setiap skrip untuk mengurai data permintaan, dan jumlah memori maksimum yang dapat digunakan skrip. Edit /etc/php.d/security.ini dan atur arahan berikut:
11. Install Suhosin Advanced Protection System for PHP
Suhosin adalah sistem perlindungan lanjutan untuk instalasi PHP. Ini dirancang untuk melindungi server dan pengguna dari kekurangan yang diketahui dan tidak diketahui dalam aplikasi PHP dan inti PHP. Suhosin hadir dalam dua bagian independen, yang dapat digunakan secara terpisah atau dikombinasikan. Bagian pertama adalah patch kecil terhadap inti PHP, yang mengimplementasikan beberapa perlindungan tingkat rendah terhadap bufferoverflows atau kerentanan format string dan bagian kedua adalah ekstensi PHP yang kuat yang mengimplementasikan semua perlindungan lainnya.12. Menonaktifkan Fungsi PHP Berbahaya
PHP memiliki banyak fungsi yang dapat digunakan untuk memecahkan server Anda jika tidak digunakan dengan benar. Anda dapat mengatur daftar fungsi di /etc/php.d/security.ini menggunakan direktif disable_functions :
13. PHP Fastcgi / CGI – cgi.force_redirect Directive
PHP bekerja dengan FastCGI. Fascgi mengurangi jejak memori server web Anda, tetapi tetap memberi Anda kecepatan dan kekuatan dari seluruh bahasa PHP. Anda dapat mengkonfigurasi Apache2 + PHP + FastCGI atau cgi seperti yang dijelaskan di sini . Petunjuk konfigurasi cgi.force_redirect mencegah siapa pun memanggil PHP secara langsung dengan URL seperti http://www.cyberciti.biz/cgi-bin/php/hackerdir/backdoor.php. Aktifkan cgi.force_redirect untuk alasan keamanan. Edit /etc/php.d/security.ini dan atur direktif berikut:
14. Pengguna PHP dan ID Grup
mod_fastcgi adalah modul cgi untuk server web Apache. Itu dapat terhubung ke server FASTCGI eksternal. Anda perlu memastikan php dijalankan sebagai pengguna non-root. Jika PHP dijalankan sebagai root atau UID di bawah 100, PHP dapat mengakses dan / atau memanipulasi file sistem. Anda harus menjalankan PHP CGI sebagai pengguna non-hak istimewa menggunakan suEXEC atau mod_suPHP Apache . Fitur suEXEC memberikan pengguna Apache kemampuan untuk menjalankan program CGI di bawah ID pengguna yang berbeda dari ID pengguna server web pemanggil. Dalam contoh ini, php-cgi saya berjalan sebagai pengguna phpcgi dan apache berjalan sebagai pengguna apache:15. Batasi Akses PHP ke Sistem File
Direktif open_basedir mengatur direktori tempat PHP diizinkan untuk mengakses file menggunakan fungsi seperti fopen (), dan lainnya. Jika file berada di luar jalur yang ditentukan oleh open_basdir, PHP akan menolak untuk membukanya. Anda tidak dapat menggunakan tautan simbolis sebagai solusinya. Misalnya, hanya izinkan akses ke direktori / var / www / html dan bukan ke / var / www, atau / tmp atau / etc:
16. Jalur Sesi
Dukungan sesi di PHP terdiri dari cara untuk mempertahankan data tertentu di seluruh akses berikutnya. Ini memungkinkan Anda untuk membangun aplikasi yang lebih disesuaikan dan meningkatkan daya tarik situs web Anda. Path ini didefinisikan di file /etc/php.ini dan semua data yang terkait dengan sesi tertentu akan disimpan dalam file di direktori yang ditentukan oleh opsi session.save_path. Standarnya adalah sebagai berikut di bawah RHEL / CentOS / Fedora Linux:
https://www.cyberciti.biz/tips/php-security-best-practices-tutorial.html
No comments:
Post a Comment