PHP adalah bahasa scipting server-side open source yang digunakan secara luas. Web server Apache menyediakan akses ke konten dan file melalui HTTP ATAU protokol HTTPS. Sebuah bahasa scripting server-side yang terkonfigurasi dapat menimbulkan berbagai macam masalah. Oleh karena itu PHP harus digunakan dengan hati-hati. Berikut 10 praktik terbaik konfigurasi untuk keamanan PHP.
Contoh Konfigurasi Untuk Kemanana PHP:
Sebagian besar tindakan yang tercantum dalam posting ini ditulis dengan asumsi akan dieksekusi oleh user dengan hak akses root dengan menjalankan bash atau shell modern lainnya:
Contoh output:
System operasi yang digunakan dalam demonstrasi ini:
Output
Ketika expose_php diaktifkan, akan mengekspos informasi secara terbuka bahwa pada server ini menggunakan PHP, yang menampilkan informasi penting berupa versi PHP di header HTTP (misalnya, X-Powered-By: PHP / 5.3.3). Logo guids logo PHP (lihat contoh) juga terkena, sehingga menambahkan mereka ke URL dari situs PHP diaktifkan akan menampilkan logo yang sesuai. Ketika expose_php diaktifkan Anda dapat melihat versi php menggunakan perintah berikut:
include
dan statement Contoh Konfigurasi Untuk Kemanana PHP:
- DocumentRoot: / var / www / html
- Standar Web server: Apache (Anda dapat menggunakan Lighttpd atau Nginx bukan Apache)
- Default file konfigurasi PHP: /etc/php.ini
- Default direktori ekstensi config PHP : /etc/php.d/
- Contoh file konfigurasi kemananan PHP /etc/php.d/security.ini (Anda harus membuat file ini menggunakan editor teks)
- Sistem operasi: RHEL / CentOS / Fedora Linux (petunjuk harus bekerja sesuai dengan distribusi Linux lainnya seperti Debian / Ubuntu atau lainnya Unix seperti sistem operasi OpenBSD / FreeBSD / HP-UX).
- Default php Server TCP / UDP port: none
Sebagian besar tindakan yang tercantum dalam posting ini ditulis dengan asumsi akan dieksekusi oleh user dengan hak akses root dengan menjalankan bash atau shell modern lainnya:
$ php -v
Contoh output:
PHP 5.3.3 undefinedcli) undefinedbuilt: Oct 24 2011 08:35:41) Copyright undefinedc) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright undefinedc) 1998-2010 Zend Technologies
System operasi yang digunakan dalam demonstrasi ini:
$ cat /etc/redhat-release
Output
Red Hat Enterprise Linux Server release 6.1 (Santiago)
1. Mengenal Jenis Serangan PHP
Aplikasi berbasis PHP dapat menghadapi berbagai jenis serangan. Contohnya seperti yang terlihat berikut ini:- XSS - Cross-site scripting adalah kerentanan dalam aplikasi web php, yang dapat dimanfaatkan penyerang untuk mencuri informasi pengguna. Anda dapat mengkonfigurasi Apache dan menulis skrip PHP dengan lebih aman dengan cara memvalidasi semua input pengguna untuk menghindari serangan XSS.
- SQL injection - Merupakan sebuah teknik yang menyalahgunakan sebuah celah keamanan yang terjadi dalam lapisan basis data sebuah aplikasi. Celah ini terjadi ketika masukan pengguna tidak disaring secara benar dari karakter-karakter pelolos bentukan string yang diimbuhkan dalam pernyataan SQL atau masukan pengguna tidak bertipe kuat dan karenanya dijalankan tidak sesuai harapan. Ini sebenarnya adalah sebuah contoh dari sebuah kategori celah keamanan yang lebih umum yang dapat terjadi setiap kali sebuah bahasa pemrograman atau skrip diimbuhkan di dalam bahasa yang lain.
- File Upload - Hal ini memungkinkan pengunjung untuk menempatkan file (file upload) pada server Anda. Hal ini dapat mengakibatkan berbagai masalah keamanan seperti menghapus file-file diserber, menghapus database, mendapatkan rincian pengguna dan masih banyak lagi. Anda dapat menonaktifkan file upload dengan menggunakan php atau menulis script keamanan (seperti memvalidasi input pengguna dan hanya memungkinkan jenis file gambar seperti png atau gif).
- Termasuk file lokal dan remote server- Seorang penyerang dapat membuka file dari server remote dan mengeksekusi kode PHP. Hal ini memungkinkan mereka untuk mengupload file, menghapus file dan menginstal backdoors. Anda dapat mengkonfigurasi php untuk menonaktifkan eksekusi file dari jarak jauh.
- eval() - Mengevaluasi string sebagai kode PHP. Sering digunakan oleh penyerang untuk menyembunyikan kode dan tools mereka pada server itu sendiri. Anda dapat mengkonfigurasi php untuk menonaktifkan eval().
- Sea Surf Attack (CSRF) - Mungkin kita sudah pernah dengan apa itu CSRF (Cross Site Request Forgery) adalah sebuah serangan pada website yang dieksekusi atas wewenang korban, tanpa dikehendakinya. Celah keamanan CSRF (baca “sea-surf) telah dikenal sejak 1990-an dalam beberapa kasus eksploitasi, dan tetap mengancam sampai saat ini, seiring dengan semakin menjamurnya berbagai website dengan teknologi dan fiturnya masing-masing. CSRF merupakan pemalsuan request yang berasal dari site yang berbeda, tetapi dari sisi client tidak mengubah alamat IP karena memang dieksekusi oleh korban. Penyerang mengirimkan link atau halaman berisi request tersembunyi pada pengguna (korban), yang dieksekusi oleh penggunan tersebut ke website target. Dalam menyusun serangan, penyusun akan mempelajari terlebih dahulu kelemahan-kelemahan website target yang dapat dimanfaatkan dengan teknik CSRF.
2. Melihat Built-in Modul PHP
Untuk melihat set modul compiled-in PHP ketik perintah berikut:# php -mOutput:
[PHP Modules] apc bcmath bz2 calendar Core ctype curl date dom ereg exif fileinfo filter ftp gd gettext gmp hash iconv imap json libxml mbstring memcache mysql mysqli openssl pcntl pcre PDO pdo_mysql pdo_sqlite Phar readline Reflection session shmop SimpleXML sockets SPL sqlite3 standard suhosin tokenizer wddx xml xmlreader xmlrpc xmlwriter xsl zip zlib [Zend Modules] SuhosinDisarankan menggunakan modul-modul PHP seminimal mungkin untuk meningkatkan performa kinerja dan keamanan PHP itu sendiri. Sebagai contoh, Anda dapat menonaktifkan modul sqlite3 dengan menghapus file konfigurasi, ATAU mengubah nama (memindahkan) file bernama /etc/php.d/sqlite3.ini sebagai berikut:
# rm /etc/php.d/sqlite3.iniATAU
# mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disableCompiled-in modul PHP lainnya hanya dapat dihapus oleh instalasi ulang PHP dengan mengurangi file konfigurasi yang tidak diperlukan. Anda dapat men-download kode sumber php dari php.net dan kompilasi sebagai berikut dengan GD, FastCGI, dan dukungan MySQL:
./configure --with-libdir=lib64 --with-gd --with-mysql --prefix=/usr --exec-prefix=/usr \ --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share \ --includedir=/usr/include --libexecdir=/usr/libexec --localstatedir=/var \ --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info \ --cache-file=../config.cache --with-config-file-path=/etc \ --with-config-file-scan-dir=/etc/php.d --enable-fastcgi \ --enable-force-cgi-redirect
3. Batasi Ekspos Informasi PHP
Nonaktifkanexpose_php
untuk membatasi informasi dasar PHP. Edit /etc/php.d/security.ini dan mengatur direktif berikut:expose_php=Off
Ketika expose_php diaktifkan, akan mengekspos informasi secara terbuka bahwa pada server ini menggunakan PHP, yang menampilkan informasi penting berupa versi PHP di header HTTP (misalnya, X-Powered-By: PHP / 5.3.3). Logo guids logo PHP (lihat contoh) juga terkena, sehingga menambahkan mereka ke URL dari situs PHP diaktifkan akan menampilkan logo yang sesuai. Ketika expose_php diaktifkan Anda dapat melihat versi php menggunakan perintah berikut:
$ curl -I http://www.cyberciti.biz/index.phpOutput:
HTTP/1.1 200 OK X-Powered-By: PHP/5.3.3 Content-type: text/html; charset=UTF-8 Vary: Accept-Encoding, Cookie X-Vary-Options: Accept-Encoding;list-contains=gzip,Cookie;string-contains=wikiToken;string-contains=wikiLoggedOut;string-contains=wiki_session Last-Modified: Thu, 03 Nov 2011 22:32:55 GMT ...
4. Minimalkan loadable Modul PHP (Dynamic Extensions)
PHP mendukung "Dynamic Extensions". Secara default, RHEL memuat (loads) semua beban ekstensi modul yang ada dalam direktori /etc/php.d/. Untuk mengaktifkan atau menonaktifkan modul tertentu, Anda hanya perlu dengan mencari file konfigurasi di direktori /etc/php.d/ dan tandai nama modul tersebut sebagai komentar. Anda juga dapat mengubah nama atau menghapus file modul konfigurasi. Untuk kinerja dan kemamanan PHP terbaik, Anda hanya harus mengaktifkan ekstensi webapps yang dibutuhkan. Misalnya, untuk menonaktifkan ekstensi gd, ketik perintah berikut:# cd /etc/php.d/ # mv gd.{ini,disable} # /sbin/service httpd restartUntuk mengaktifkan modul gd, masukkan:
# Gd mv. {Menonaktifkan, Suami} # / Sbin / service httpd restart
5. Catat (Logs) Semua Error PHP
Jangan mengekspos pesan kesalahan PHP untuk pengunjung situs yaitu denga mengedit /etc/php.d/security.ini dan mengatur direktif berikut:display_errors = OffPastikan Anda mencatat (log) semua kesalahan php ke file log:
log_errors = On script error_log = / var / log / httpd / php error.log
6. Tolak Uploading File
Edit /etc/php.d/security.ini untuk mengatur direktif berikut untuk menonaktifkan file upload:file_uploads = OffPengguna aplikasi Anda perlu meng-upload file, aktifkan fitur ini dengan membatasi upload_max_filesize yaitu membatasi ukuran maksimum file yang akan diterima PHP melalui upload:
file_uploads = On # Pengguna hanya dapat meng-upload upto 1MB via php upload_max_filesize = 1M
7. Nonaktifkan eksekusi kode PHP secara remote.
Jika diaktifkan,allow_url_fopen
memungkinkan fungsi PHP File - seperti file_get_contents ()
dan reuire
- yang dapat mengambil data dari lokasi tertentu dengan cara remote, seperti dengan FTP atau situs web.Pilihan
allow_url_fopen
memungkinkan fungsi PHP File - seperti file_get_contents ()
dan reuire
- yang dapat mengambil data dari lokasi tertentu dengan cara remote menggunakan ftp atau http protokol.Programmer sering melupakan ini dan tidak melakukan filter yang tepat terhadap input pengguna ketika menerima data pengguna yang disediakan untuk fungsi-fungsi ini, hal ini menyebabkan kerentanan untuk kode injeksi. Sejumlah besar kerentanan kode injeksi dilaporkan dalam aplikasi web berbasis PHP disebabkan oleh kombinasi yang memungkinkan
allow_url_fopen = OffDirekomendasikan juga untuk menonaktifkan
allow_url_include
: allow_url_include = Off
8. Aktifkan Safe Mode SQL
Edir/etc/php.d/security.ini
lalu atur direktif berikut:sql.safe_mode = On
Jika ternyata On,
mysql_connect ()
dan mysql_pconnect ()
akan mengabaikan argumen yang dilewatkan. Harap dicatat bahwa Anda mungkin harus membuat beberapa perubahan pada kode Anda. Pihak ketiga dan aplikasi open source seperti WordPress, dan lain-lain mungkin tidak berfungsi sama sekali ketika sql.safe_mode
diaktifkan. Direkomendasikan juga bahwa Anda menonaktifkan magic_quotes_gpc
untuk semua php 5.3.x sebagai filter keamanan. Rubah fungsi filter mysql_escape_string ()
magic_quotes_gpc = Off
9. Kontrol Ukuran Request POST
Metode request HTTP POST digunakan ketika klien (browser atau pengguna) harus mengirim data ke web server Apache sebagai bagian dari request, seperti ketika meng-upload file atau mengirimkan formulir yang telah diisi. Penyerang mungkin mencoba untuk mengirim request POST berukuran besar untuk konsumsi sumber daya sistem Anda. Anda dapat membatasi request POST ukuran maksimum yang akan diproses PHP. Edit /etc/php.d/security.ini dan atur direktif berikut:; tentukan nilai realistis di sini post_max_size = 1K1K merupakan ukuran maksimal dari data post diperbolehkan oleh aplikasi php. Pengaturan ini juga mempengaruhi file upload. Untuk meng-upload file besar, nilai ini harus lebih besar dari
upload_max_filesize
. Saya juga menyarankan agar Anda membatasi metode yang tersedia menggunakan web server Apache. Edit, httpd.conf
dan atur direktif berikut untuk DocumentRoot/var/www/html
:<Directory /var/www/html> <LimitExcept GET POST> Agar memungkinkan, menyangkal </LimitExcept> ## Tambahkan sisa config berjalan di sini ... ## </Directory>
10. Resource Control (DoS Control)
Anda dapat mengatur waktu eksekusi maksimum setiap script php, dalam hitungan detik. Pilihan rekomendasi yang Lain adalah untuk menetapkan jumlah maksimum waktu setiap script yang dihabiskan untuk request parsing data, dan jumlah maksimum script memori yang mungkin dikonsumsi. Edit/etc/php.d/security.ini
dan atur arahan berikut:# Diatur dalam detik max_execution_time = 30 max_input_time = 30 memory_limit = 40M
11. Instal Suhosin Advanced Protection System untuk PHP
Suhosin adalah sistem perlindungan canggih untuk instalasi PHP. Dirancang untuk melindungi server dan pengguna dari kelemahan baik dikenal maupun tidak dikenal dalam aplikasi PHP dan inti PHP. Suhosin hadir dalam dua bagian independen, yang dapat digunakan secara terpisah atau dengan kombinasi. Bagian pertama adalah patch kecil terhadap inti PHP, yang mengimplementasikan beberapa perlindungan tingkat rendah terhadap buffer overflows dan format string kerentanan dan bagian kedua adalah ekstensi PHP yang kuat yang mengimplementasikan semua perlindungan lainnya.12. Nonaktifkan Fungsi PHP Berbahaya
PHP memiliki banyak fungsi yang dapat digunakan untuk mneghancurkan server Anda jika tidak digunakan dengan benar. Anda dapat mengatur daftar fungsinya di/etc/php.d/security.ini
dengan menggunakan direktif disable_functions
:disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
13. Direktif PHP FastCGI / CGI - cgi.force_redirect
PHP bekerja dengan FastCGI. Fascgi mengurangi jejak memori server web Anda, tapi masih memberi Anda kecepatan dan kekuatan seluruh script PHP. Anda dapat mengkonfigurasi Apache2 + PHP + FastCGI atau cgi seperti dijelaskan di sini. Konfigurasi direktifcgi.force_redirect
mencegah orang dari memanggil fungsi PHP langsung dengan URL seperti http://www.example.com/cgi-bin/php/hackerdir/backdoor.php. Aktifkan cgi.force_redirect
. Edit ; Enable cgi.force_redirect for security reasons in a typical *Apache+PHP-CGI/FastCGI* setup cgi.force_redirect=On
14. PHP User dan Group ID
mod_fastcgi
adalah cgi-modul
untuk web server Apache yang dapat terhubung ke server FastCGI eksternal. Anda perlu memastikan php dijalankan sebagai user non-root. Jika eksekusi PHP dilakukan sebagai sebagai root atau UID di bawah 100, dapat mengakses dan atau memanipulasi file sistem. Anda harus menjalankan PHP CGIS sebagai pengguna non-privileged
istimewa yang menggunakan Apache suexec atau mod_suPHP. Fitur suexec menyediakan pengguna Apache kemampuan untuk menjalankan program CGI di bawah ID pengguna, pengguna ID yang berbeda dari panggilan web server. Dalam contoh ini, php_cgi saya berjalan sebagai user phpcgi dan apache berjalan sebagai user apache.# ps aux | grep php-cgiOuput:
phpcgi 6012 0.0 0.4 225036 60140 ? S Nov22 0:12 /usr/bin/php-cgi phpcgi 6054 0.0 0.5 229928 62820 ? S Nov22 0:11 /usr/bin/php-cgi phpcgi 6055 0.1 0.4 224944 53260 ? S Nov22 0:18 /usr/bin/php-cgi phpcgi 6085 0.0 0.4 224680 56948 ? S Nov22 0:11 /usr/bin/php-cgi phpcgi 6103 0.0 0.4 224564 57956 ? S Nov22 0:11 /usr/bin/php-cgi phpcgi 6815 0.4 0.5 228556 61220 ? S 00:52 0:19 /usr/bin/php-cgi phpcgi 6821 0.3 0.5 228008 61252 ? S 00:55 0:12 /usr/bin/php-cgi phpcgi 6823 0.3 0.4 225536 58536 ? S 00:57 0:13 /usr/bin/php-cgiAnda dapat menggunakan tool seperti spawn-fcgi untuk memilah proses FastCGI remote dan local sebagai user phpcgi (pertama, tambahkan user phpcgi ke sistem):
# spawn-fcgi -a 127.0.0.1 -p 9000 -u phpcgi -g phpcgi -f /usr/bin/php-cgiSekarang, Anda dapat mengkonfigurasi Apache, Lighttpd, dan web server Nginx untuk menggunakan external PHP FastCGI yang berjalan pada port 9000 di alamat IP 127.0.0.1
15. Batas PHP Akses File System
Direktif open_basedir berfungsi mengatur direktori PHP yang diperbolehkan untuk mengakses file dengan menggunakan fungsi sepertifopen()
, dan lain-lain. Jika file berada di luar jalur yang ditetapkan oleh open_basedir
, PHP akan menolak untuk membukanya. Anda tidak dapat menggunakan link simbolik sebagai solusi. Misalnya hanya memungkinkan akses ke direktori /var/www/html
dan tidak juga /var/www
, atau /tmp
atau /etc
:; Limits the PHP process from accessing files outside ; of specifically designated directories such as /var/www/html/ open_basedir="/var/www/html/" ; ------------------------------------ ; Multiple dirs example ; open_basedir="/home/httpd/vhost/cyberciti.biz/html/:/home/httpd/vhost/nixcraft.com/html/:/home/httpd/vhost/theos.in/html/" ; ------------------------------------
16. Session Path
Session Path di PHP merupakan cara untuk meneruskan data tertentu di akses berikutnya. Hal ini memungkinkan Anda untuk membangun aplikasi yang lebih mudah untuk disesuaikan untuk meningkatkan daya tarik situs web Anda. Cara ini didefinisikan dalam file /etc/php.ini dan semua data yang terkait dengan sesi tertentu akan disimpan dalam file di direktori yang ditentukan oleh option session save_path. Defaultnya di bawah RHEL/CentOS/ Fedora Linux adalah sebagai berikut :session.save_path="/var/lib/php/session" ; Set the temporary directory used for storing files when doing file upload upload_tmp_dir="/var/lib/php/session"Pastikan path
/var/www/html
dan tidak dapat dibaca atau ditulis oleh pengguna sistem lainnya:# ls -Z /var/lib/php/Contoh output:
drwxrwx---. root apache system_u:object_r:httpd_var_run_t:s0 sessionNote: Opsi Z untuk perintah ls menampilkan konteks keamanan SELinux seperti file mode, user, group, security context dan file name.
17. Menjaga agar PHP, Software, Dan OS tetap Up to Date
Menerapkan patch keamanan merupakan bagian penting untuk memelihara Linux, Apache, PHP, dan MySQL server. Semua pembaruan keamanan php harus ditinjau dan diterapkan sesegera mungkin dengan menggunakan salah satu dari tool berikut (jika Anda menginstal PHP melalui paket manajer):# yum updateAtau
# apt-get update && apt-get upgradeAnda dapat mengkonfigurasi topi Red hat/CentOS/Fedora Linux untuk mengirim notifikasi yum packed update melalui email. Pilihan lain adalah dengan menerapkan semua pembaruan keamanan melalui cron. Di bawah Debian/Ubuntu Linux Anda dapat menggunakan
apticron
untuk mengirim notifikasi keamanan.18. Membatasi Berkas dan Direktori Access
Pastikan Anda menjalankan Apache sebagai user non-root seperti Apache atau www. Semua file dan direktori harus dimiliki oleh pengguna non-root (atau user apache) di bawah /var/www/html:Note: Periksa php.net untuk rilis terbaru untuk instalasi kode sumber.
# chown -R apache:apache /var/www/html//var/www/html/ adalah subdirektori dan DocumentRoot yang dimodifikasi oleh pengguna lain karena root tidak pernah mengeksekusi file, dan tidak dibolehkn membuat (create) file.
Pastikan hak akses file ditetapkan dengan 0444 (read-only) di bawah /var/www/html/:
# chmod -R 0444 /var/www/html/Pastikan semua hak akses direktori ditetapkan dengan 0445 di bawah /var/www/html/:
# find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 {}
Tentang Menyiapkan Hak Akses File Dengan Benar
Chown dan perintah chmod memastikan bahwa dibawah DocumentRoot atau file yang terdapat dalam DocumentRoot tidak dapat ditulis oleh server Web pengguna apache. Harap dicatat bahwa Anda perlu mengatur hak akses yang paling masuk akal untuk model pengembangan website Anda, sehingga merasa aman untuk menggunakan perintah chown dan chmod untuk disesuaikan dengan kebutuhan Anda. Dalam contoh ini, server Apache dijalankan sebagai user apache, dikonfigurasi dengan arahan Pengguna dan Grup dalam file httpd.conf Anda. Pengguna apache perlu membaca akses ke segala sesuatu di bawah DocumentRoot tetapi tidak harus memiliki akses tulis apa pun.Pastikan httpd.conf memiliki arahan berikut untuk konfigurasi keamanan yang ketat:
<Directory / > Options None AllowOverride None Order allow,deny </Directory>Anda hanya harus memberikan akses tulis (writeable) ketika diperlukan saj. Beberapa aplikasi web seperti wordpress dan lain-lain mungkin memerlukan sebuah caching direktori. Anda dapat memberikan hak akses tulis ke direktori caching menggunakan perintah berikut:
# chmod a+w /var/www/html/blog/wp-content/cache ### block access to all ### # echo 'deny from all' > /var/www/html/blog/wp-content/cache/.htaccess
19. Proteksi File Konfigurasi Apache, PHP, dan MySQL
Proteksi file konfigurasi Apache, PHP dan MySQL sehingga tidak akan dapat dihapus ataupun dirubah dengan perintah apapun.Gunakan perintah
chattr
sebagai berikut:# chattr +i /etc/php.ini # chattr +i /etc/php.d/* # chattr +i /etc/my.ini # chattr +i /etc/httpd/conf/httpd.conf # chattr +i /etc/Perintah
chattr
juga dapat digunakan untuk melindungi file-file di dalam direktori /var/www/html:# chattr +i /var/www/html/file1.php # chattr +i /var/www/html/
20. Gunakan Ekstensi Security Linux (seperti SELinux)
Linux hadir dengan berbagai patch keamanan yang dapat digunakan untuk menjaga program server terhadap kesalahan konfigurasi atau yang membahayakan. Bila mungkin, gunakan SELinux dan ekstensi Security Linux lainnya untuk mengatasi keterbatasan pada jaringan dan program lainnya. Sebagai contoh, SELinux menyediakan berbagai kebijakan keamanan untuk kernel Linux dan web server Apache. Untuk melihat semua variabel proteksi Apache SELinux, masukkan:# getsebool -a | grep httpdOutput:
allow_httpd_anon_write --> off allow_httpd_mod_auth_ntlm_winbind --> off allow_httpd_mod_auth_pam --> off allow_httpd_sys_script_anon_write --> off httpd_builtin_scripting --> on httpd_can_check_spam --> off httpd_can_network_connect --> off httpd_can_network_connect_cobbler --> off httpd_can_network_connect_db --> off httpd_can_network_memcache --> off httpd_can_network_relay --> off httpd_can_sendmail --> off httpd_dbus_avahi --> on httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> off httpd_execmem --> off httpd_read_user_content --> off httpd_setrlimit --> off httpd_ssi_exec --> off httpd_tmp_exec --> off httpd_tty_comm --> on httpd_unified --> on httpd_use_cifs --> off httpd_use_gpg --> off httpd_use_nfs --> offUntuk menonaktifkan Apache cgi Support, masukkan:
# setsebool -P httpd_enable_cgi offUntuk informasi lebih lanjut lihat Red Hat SELinux Guide
21. Instal mod_security
Mod_security merupakan intrusion detection open source dan prevention engine untuk aplikasi web. Anda dapat dengan mudah menginstalmod_security
di Linux dan melindungi aplikasi apache dan php berdasarkan XSS dan berbagai serangan lainnya:## A few Examples ## # Do not allow to open files in /etc/ SecFilter /etc/ # Stop SQL injection SecFilter "delete[[:space:]]+from" SecFilter "select.+from"
22. Jika Mungkin Jalankan Apache/PHP di Chroot Environment
Menempatkan PHP/Apache di chroot dapat meminimalkan potensial kerusakan yang ditimbulkan oleh break-in yaitu dengan mengisolasi filesystem server web ke dalam bagian kecil.23. Gunakan Firewall Untuk Membatasi Outgoing Connection
Penyerang akan men-download file secara lokal pada web-server Anda menggunakan alat seperti wget. Gunakan iptables untuk memblokir koneksi keluar dari user apache. Modulipt_owner
dapat digunakan untuk mencocokkan beberapa karakteristik dari pembuat paket, untuk paket lokal yang dihasilkan. Hal ini hanya berlaku dalam rangkaian OUTPUT. Dalam contoh berikut, mengizinkan user jonie untuk terhubung keluar menggunakan port 80 (berguna untuk RUN atau centos repo access):/sbin/iptables -A OUTPUT -o eth0 -m owner --uid-owner jonie -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPTBerikut merupakan contoh lain yang memblokir semua koneksi keluar dari user apache kecuali ke server smtp kita sendiri, dan spam validation API service:
# .... /sbin/iptables --new-chain apache_user /sbin/iptables --append OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables --append OUTPUT -m owner --uid-owner apache -j apache_user # allow apache user to connec to our smtp server /sbin/iptables --append apache_user -p tcp --syn -d 192.168.1.100 --dport 25 -j RETURN # Allow apache user to connec to api server for spam validation /sbin/iptables --append apache_user -p tcp --syn -d 66.135.58.62 --dport 80 -j RETURN /sbin/iptables --append apache_user -p tcp --syn -d 66.135.58.61 --dport 80 -j RETURN /sbin/iptables --append apache_user -p tcp --syn -d 72.233.69.89 --dport 80 -j RETURN /sbin/iptables --append apache_user -p tcp --syn -d 72.233.69.88 --dport 80 -j RETURN ######################### ## Add more rules here ## ######################### # No editing below # Drop everything for apache outgoing connection /sbin/iptables --append apache_user -j REJECT
24. Pantau Logs & Lakukan Audit
Cek file log Apache:# tail -f /var/log/httpd/error_log # grep 'login.php' /var/log/httpd/error_log # egrep -i "denied|error|warn" /var/log/httpd/error_logCek file log PHP:
# tail -f /var/log/httpd/php_scripts_error.log # grep "...etc/passwd" /var/log/httpd/php_scripts_error.logLog file memberikan gambaran beberapa pemahaman tentang jenis serangan yang dilakukan terhadap server dan memungkinkan Anda untuk mengaudit sehingga dapat diambil keputusan tingkat keamanan yang diperlukan. Service
auditd
tersedia untuk sistem audit. Aktifkan auditd
untuk mengaudit SELinux events, authetication events, file modifications, account modification dan sebagainya. Direkomendasikan juga untuk menggunakan "Linux System Monitoring Tools" standar untuk memantau web-server Anda.25. Jalankan Service Per System atau VM Instance
Untuk instalasi system yang besar dianjurkan untuk menjalankan, database, statis, dan konten dinamis dari server yang berbeda./////////////// / ISP/Router / ////////////// \ | Firewall \ | +------------+ | LB01 | +------------+ +------------------------+ | | static.lan.example.com | +-----------------+--------------------------+ | phpcgi1.lan.example.com| +------------------------+ | phpcgi2.lan.example.com| +------------------------+ | mysql1.lan.example.com | +------------------------+ | mcache1.lan.example.com| +------------------------+Menjalankan Service Pada Server terpisah)
Jalankan network service yang berbeda pada server terpisah atau VM Instances akan membatasi jumlah layanan lainnya yang dapat membahayakan. Sebagai contoh, jika seorang penyerang berhasil mengeksploitasi perangkat lunak seperti alur Apache, dia akan memperoleh akses ke seluruh server termasuk service lain yang berjalan pada server yang sama (seperti MySQL, server e-mail dan sebagainya). Namun, dalam contoh di atas konten yang disajikan adalah sebagai berikut:
- static.lan.example.com - Gunakan lighttpd atau nginx server untuk static assets such seperti js/css/images.
- phpcgi1.lan.example.com dan phpcgi2.lan.example.com - Apache web-server dengan php digunakan untuk mengenerate dynamic content.
- mysql1.lan.example.com - MySQL database server.
- mcache1.lan.example.com - Memcached server merupakan caching system yang sangat cepat untuk MySQL. Menggunakan libevent vs epoll (Linux runtime) untuk skala ke sejumlah koneksi terbuka dan menggunakan non-blocking jaringan I/O.
- LB01 - nginx web dan reverse proxy server di antar muka Apache Web server. Semua koneksi yang datang dari internet ditujukan kepada salah satu server Web yang disalurkan melalui nginx proxy server, yang mungkin baik untuk menangani permintaan sendiri atau lulus permintaan keseluruhannya atau sebagian ke server web utama. LB01 menyediakan load-balancing sederhana.
Lihat juga Install modul php-tidy di Centos / RHEL
ijin nyimak artikel nya gan
BalasHapusterimakasih atas informasinya
dengan senang hati... silahkan juga berlangganan di sini... :)
BalasHapusthanx gan,,,sedikit2 jdi tau tentang Konfigurasi Keamanan PHP nya,,,semangat berbagi gan,,,
BalasHapusKunjungi website saya ya : https://faiz4l.mahasiswa.atmaluhur.ac.id/ dan website kampus saya : http://www.atmaluhur.ac.id