Tips keamanan instalasi
From LimeSurvey Manual
Umum
Harap diperhatikan, kami menganggap serius masalah keamanan dan menanganinya dengan cepat. Oleh karena itu, jika Anda mengetahui adanya masalah keamanan di LimeSurvey, beri tahu kami dengan membuat laporan bug di pelacak bug kami (mohon tandai bug tersebut dengan tingkat keparahan atau kategori 'security').
Untuk detail lebih lanjut, silakan baca Kebijakan keamanan kami untuk melaporkan masalah/kerentanan keamanan.
Pembatasan web server
Jika Anda menggunakan Apache, LimeSurvey menyertakan beberapa berkas htaccess untuk pembatasan akses. Pastikan Anda mengizinkan penggunaan htaccess yang disertakan tersebut dengan AllowOverride.
Dengan web server lain, atau jika Anda ingin menggunakan AllowOverride None, Anda harus:
- (opsional) menonaktifkan akses ke semua berkas di application, protected, framework, dan themes/*/views
- menonaktifkan akses ke berkas yang diunggah pengguna di /upload/surveys/.*/fu_[a-z0-9]
- (opsional) menonaktifkan akses ke berkas yang dapat dieksekusi di direktori upload
Anda dapat menemukan contoh untuk nginx di FAQ Umum kami
Izin berkas Linux
Jika Anda menggunakan server Linux, pengaturan izin berkas yang sesuai diperlukan untuk mengamankan instalasi LimeSurvey Anda.
Fakta dasar tentang izin berkas Linux/*nix
Sistem operasi Linux/*nix bersifat multipengguna. Artinya, selain akun pribadi Anda, mungkin ada akun pengguna lain di sistem tersebut, sehingga Anda perlu berhati-hati dalam memberikan izin kepada pengguna lain.
Perlu diingat bahwa akun 'root' akan selalu memiliki izin untuk mengakses berkas Anda (apa pun izin berkas yang Anda atur) karena akun tersebut adalah pengguna super-admin.
Web server (yang menjalankan LimeSurvey) juga berjalan dengan identitas (pengguna) tertentu. Di Linux, biasanya pengguna ini adalah 'www', 'www-data' (di Debian/Ubuntu), 'apache', atau 'nobody'. Namun, beberapa perusahaan hosting menggunakan sistem (seperti suexec) yang memungkinkan skrip LimeSurvey dijalankan dengan pengguna pribadi Anda. Tentu saja, pengguna web server harus memiliki hak untuk membaca berkas LimeSurvey. Namun, hanya sebagian kecil subdirektori LimeSurvey yang harus dapat ditulis oleh pengguna web server.
Mengatur izin berkas pada sistem Linux yang dikelola sendiri
Jika Anda mengelola sendiri konfigurasi web server dan sistem operasi (Anda adalah pemilik server fisik atau menyewa server virtual dengan akses root), Anda dapat mempertimbangkan rekomendasi berikut.
Pertama-tama, Anda dapat mengatur pemilik dan grup berkas LimeSurvey agar pengaturan izin berkas menjadi lebih mudah. Salah satu strategi yang mungkin adalah mengatur pemilik berkas LimeSurvey ke nama pengguna pribadi Anda, dan grup berkas LimeSurvey ke grup web server. Biasanya, grup web server ini hanya berisi akun web server (dan mungkin akun webmaster lain). Misalnya, jika nama pengguna Anda adalah 'myaccount' dan pengguna web server adalah 'apache' dalam grup 'apache', maka melalui akses shell Anda dapat menggunakan perintah berikut: $ chown -R myaccount:apache limesurvey/. Setelah itu, atur izin berkas dan subdirektori.
Agar skrip berfungsi dengan baik, diperlukan akses tulis ke beberapa direktori:
- Direktori /limesurvey/application/config memerlukan Read & Write untuk menyimpan pengaturan konfigurasi aplikasi
- Direktori /limesurvey/tmp beserta subdirektorinya digunakan untuk impor/unggahan dan harus diatur ke Read & Write untuk web server Anda
- Direktori upload/ beserta semua subdirektorinya juga harus memiliki izin Read & Write agar gambar dan berkas media dapat diunggah
- Semua direktori dan berkas lainnya dapat diatur ke Read Only
Mengatur izin berkas pada web server hosting
Karena tidak ada prosedur standar untuk mengamankan aplikasi web di lingkungan hosting, hal ini cukup sulit dilakukan karena lingkungan hosting berbeda-beda dalam banyak hal.
Pada kasus server terkelola, server memerlukan akses tulis ke beberapa direktori agar skrip berfungsi dengan baik:
- Direktori /limesurvey/tmp digunakan untuk impor/unggahan dan harus diatur ke Read & Write untuk web server Anda
- Direktori upload/ beserta semua subdirektorinya juga harus memiliki Read & Write untuk web server Anda agar gambar dan berkas media dapat diunggah
- Direktori dan berkas lainnya harus diatur ke Read Only
- Bergantung pada konfigurasi web server Anda, Anda mungkin perlu melakukan chmod pada folder yang dapat ditulis menjadi 755 atau 777 agar dapat ditulis oleh web server. Coba 755 terlebih dahulu, jika tidak berhasil, 'tingkatkan' ke 777
- Anda juga dapat mencoba menghapus akses baca pengguna lain ke config.php dengan mengatur izin berkas ini ke 750 - jika tidak berhasil, 'tingkatkan' ke 755
Izin berkas Windows
Jika Anda menggunakan server Windows, pastikan folder admin mengizinkan pemilik proses server web untuk menulis berkas ke direktori ini. Berkas lainnya dapat diatur ke hanya-baca dan eksekusi.
Masalah keamanan lainnya
Berikut ini hanyalah rekomendasi. Secara umum, LimeSurvey sangat aman tanpa langkah tambahan ini. Namun, jika Anda mengumpulkan data yang sangat sensitif, sedikit keamanan tambahan dapat membantu:
Penggunaan SSL
Kami umumnya merekomendasikan penggunaan SSL untuk data survei yang sensitif. Anda biasanya mengaktifkan SSL dengan mengonfigurasi server web Anda dengan benar dan menggunakan sertifikat SSL. Jika Anda telah mengaktifkan SSL, Anda sebaiknya memberlakukan SSL setiap saat melalui pengaturan global LimeSurvey. Selain itu, Anda juga dapat mengatur agar hanya menggunakan cookie 'secure' dengan mengedit opsi terkait di config.php.
Akses ke berkas config.php
Berkas /application/config/config.php berisi nama pengguna dan sandi untuk server basis data Anda. Hal ini menimbulkan masalah keamanan tertentu, terutama jika Anda menggunakan login dengan akses administratif tingkat tinggi ke basis data Anda. Jika terjadi kesalahan yang menyebabkan isi berkas PHP ini dikirim ke browser pengguna, sandi basis data dan detail lainnya dapat terancam (namun, skenario ini sangat jarang terjadi). Cara terbaik untuk meminimalkan risiko adalah dengan membuat login khusus yang hanya memiliki hak akses tertentu ke basis data LimeSurvey Anda.
Cara lain untuk mengamankan informasi ini adalah dengan memindahkan informasi dari berkas /application/config/config.php ke direktori non-web, yaitu bagi pengguna Apache, direktori di atas folder htdocs (juga dikenal sebagai public_html atau www). Pada dasarnya, Anda tetap menggunakan config.php, tetapi hanya berisi satu baris - baris yang menyertakan berkas dengan informasi konfigurasi ASLI (contoh: <?php return include("/home/hostfolder/safedata/configreal.php"); ?>). Hapus semua informasi konfigurasi asli dari /application/config/config.php dan tempelkan ke berkas lain (configreal.php) yang disebutkan dalam berkas /application/config/config.php. Berkas lain ini harus berada di direktori non-web. Dengan begitu, /application/config/config.php tidak akan berisi sandi basis data dan sebagainya - hanya nama berkas yang BERISI informasi basis data.
Hal ini menghindarkan Anda dari keharusan mengubah semua berkas lain yang menyertakan /application/config/config.php, karena config.php 'mengarahkan' berkas-berkas tersebut ke berkas konfigurasi yang berada di direktori non-web yang berisi semua informasi konfigurasi sebenarnya.
Selain itu, jangan gunakan "admin" atau "administrator" sebagai pengguna default. Buka basis data MySQL Anda (atau basis data tempat Anda menginstal LimeSurvey) dan ubah nama pengguna default "admin" menjadi apa pun yang Anda inginkan (misalnya "admin_xyz"). Sekarang akan jauh lebih sulit menebak nama pengguna baru administrator. Ingat, ini adalah salah satu dari dua variabel yang dapat digunakan penyusup untuk mendapatkan akses. Kata sandi admin adalah variabel lainnya. Jadi, pilihlah keduanya dengan sangat hati-hati.
Content Security Policy (CSP)
PERHATIAN - CSP yang diberikan di sini hanyalah contoh dan tidak dimaksudkan untuk digunakan apa adanya. Contoh ini hanya sebagai titik awal dan Anda HARUS menyesuaikannya dengan kebutuhan Anda serta mengujinya secara menyeluruh.
<IfModule mod_headers.c>
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; base-uri 'none'; form-action 'self'; frame-ancestors 'self'; upgrade-insecure-requests" "expr=%{CONTENT_TYPE} =~ m#text\/(html|javascript)|application\/pdf|xml#i"
</IfModule>