Belajar Nodejs #10: Gunakan Environment Variable untuk Mengamankan Aplikasimu
Salah satu faktor yang menentukan kualitas dari aplikasi yang kita bangun adalah keamanan.
Pada tutorial sebelumnya:
Kita menulis credential (konfigurasi, username dan password) langsung di dalam kode program.
Ini sebenarnya sangat tidak dianjurkan menurut metodology The Twelve-Factor App. 1
Apalagi nanti kalau sudah menggunakan Git.
Kenapa?
Karena bisa membuka celah keamanan dari aplikasi kita.
Karena username dan password database-nya akan mudah dicuri.
Salah satu cara mencegah hal ini, ialah dengan menggunakan Environment Variable untuk menyimpan credential.
Apa itu Environment Variable?
Environment Variable merupakan variabel dinamis pada komputer yang dapat diakses oleh sebuah program. 2
(Selanjutnya biar gampang, kita akan sebut dengan variabel env)
Sebagai contoh, sebuah variabel
env bernama HOME
akan membantu
program mencari tahu lokasi direktori
home
dari si user.
Environment Variabel ada di setiap komputer.
Kita juga bisa membuatnya…
Variabel env yang kita buat, biasanya bersifat sementara.
Artinya, hanya akan ada saat proses terjadi atau program dieksekusi.
Sedangkan variabel env bawaan dari sistem operasi akan selalu ada.
Karena ia dibuat saat komputer dinyalakan (booting/startup).
Pada sistem operasi Windows, Variabel Env dapat kita lihat dari My Computer->Properties->Advanced.
Lalu untuk membuat dan melihat isi Variabel Env dari CMD,
kita bisa gunakan perintah echo
dan set
.
Contoh:
set SITE_NAME=Petani Kode
echo %SITE_NAME%
SITE_NAME
adalah nama variabelnya.
Lalu saat kita ingin mencetak isinya,
kita gunakan perintah echo
dengan
nama variabel diapit dengan simbol persen (%
).
Ini merupakan aturan yang berlaku pada sistem operasi Windows.
Lalu pada Linux dan Unix, bagaimana?
Tidak jauh berbeda.
Pada Linux, kita menggunakan perintah export
untuk membuat variabel baru dan echo
untuk
menampilkannya.
export NAMA_VARIABEL="isi"
echo NAMA_VARIABEL
Contoh:
export SITE_NAME="Petani Kode"
echo $SITE_NAME
Lihat! saat kita mencetak variabel SITE_NAME
,
di sana kita menggunakan simbol dolar di depannya ($
).
Ini merupakan aturan yang berlaku di sistem operasi Linux dan Unix.
Mari kita coba untuk mencetak isi variabel yang sudah
ada, seperti USER
, HOME
, HOSTNAME
, dll.
Inilah yang dinamakan variabel environment yang nantinya akan kita gunakan untuk menyimpan credential.
Mengakses Variabel Env dari Nodejs
Variabel environment pada Nodejs,
dapat kita akses melalui objek process
.
Ini merupakan objek global di Nodejs yang bisa
diakses dari program mana saja, tanpa harus
mengimpornya dengan fungsi require()
.
Objek process
memiliki properti env
yang berisi semua variabel environment
yang ada di komputer.
Sebagai contoh, saya ingin mengakses
variabel HOME
.
Maka nanti yang ditulis dalam kode akan seperti ini:
var home = process.env.HOME;
Ini sebenarnya pernah kita gunakan dalam pembuatan bot telegram di Hook.io dan pembuatan bot simsimi untuk menyimpan token.
Oke, biar lebih paham…
Mari kita coba dengan praktek.
Buatlah file baru dengan nama baca_env.js
,
lalu isi dengan kode berikut:
var username = process.env.USERNAME;
var password = process.env.PASSWORD;
console.log("username anda: " + username);
console.log("password anda: " + password);
Pada kode di atas, kita mencoba mengakses
variabel USERNAME
dan PASSWORD
.
(Variabel env ini belum ada di komputer)
Sebelum mengeksekusi program,
buatlah terlebih dahulu variabelnya
dengan perintah export
(di Linux/Unix)
atau set
(di Windows).
Apabila kita tidak membuat variabel env terlebih dahulu,
maka hasilnya akan undefined
atau variabelnya belum ada.
Membuat variabel env di Linux:
export USERNAME="Petani Kode"
export PASSWORD="kopi"
Membuat variabel env di Windows:
set USERNAME=Petani Kode
set PASSWORD=kopi
Setelah membuat variabel env, sekarang coba eksekusi programnya:
Apakah kita harus selalu membuat variabel env saat eksekusi?
Tidak harus, variabel env cukup dibuat sekali saja.
Tapi, kalau nanti Terminal atau CMD-nya ditutup, maka variabel tersebut akan hilang.
Waduh… ribet donk 😞 setiap kali kita mau eksekusi program, kita harus buat dulu variabel env-nya.
Tidak juga.
Karena kita bisa:
Membuat Env Variable dari Nodejs
Coba tebak bagaimana caranya?
Yap, kita tinggal membuat properti baru
di dalam objek process.env
.
Contoh: 📄 create_env.js
// membuat variabel env
process.env.APP_VERSION = "1.34.2";
process.env.APP_NAME = "Tutorial Nodejs";
console.log("Variabel env sudah dibuat!");
console.log("APP_VERSION = " + process.env.APP_VERSION);
console.log("APP_NAME = " + process.env.APP_NAME);
Pada kode program di atas, kita membuat
dua buah variabel env dengan nama APP_VERSION
dan APP_NAME
.
Apa boleh nama variabelnya menggunakan huruf kecil?
Boleh-boleh saja, namun biasanya variabel env dibuat dengan huruf kapital semua.
Coba saja perhatikan variabel env yang sudah ada di sistem.
USER
, HOME
, OS
, HOSTNAME
…dkk.
Mereka semua pakai huruf kapital.
Lanjut…
Sekarang coba eksekusi program create_env.js
.
…dan coba gunakan perintah echo
untuk mencetaknya:
Lah! kok tidak ada? 😕
Ini karena variabel env-nya sudah dihapus dari memori.
Kenapa bisa dihapus?
Karena memang begitu…
Variabel env hanya akan ada saat program dieksekusi.
Coba saja buat variabel baru dari Terminal atau CMD, lalu tutup Terminal/CMD-nya dan buka kembali.
Lalu coba echo
variabel yang dibuat tadi.
Apakah ada atau tidak?
Pasti tidak.
Lalu bagaimana dengan variabel USER
,
HOSTNAME
, HOME
, dkk.?
Mengapa mereka semua selalu ada?
Karena mereka dibuat saat komputer startup atau saat Terminal/CMD dibuka.
Biasanya,—pada Linux—kita membuat variabel env
di dalam file .bashrc
agar variabelnya selalu ada di Terminal.
…atau bisa juga di /etc/bashrc/
dan /etc/profile
.
Berarti nanti…kalau kita buka aplikasi di komputer lain, di komputer tersebut harus dibuat lagi donk variabel env-nya.
Iya betul.
Saat kita bekerja dengan tim, aplikasi juga akan dibuka di komputer lain.
Kita harus membuat lagi variabel env di sana.
Terdengar ribet…
Tapi tenang saja, masalah ini bisa diselesaikan dengan:
Menggunakan File .env
File .env
(dotenv) berfungsi untuk menyimpan variabel env.
File ini berisi deklarasi atau pembuatan variabel env yang nantinya dapat kita load dari Nodejs.
Agar dapat menggunakan file .env
,
kita membutuhkan modul dotenv
.
Modul ini nanti akan membantu kita untuk
me-load semua variabel yang ada di file .env
.
Mari kita coba…
Pertama, kita instal dulu modul dotenv
ke
dalam project dengan perintah:
npm install dotenv
Tunggu sampai prosesnya selesai.
Setelah itu, buat file baru dengan nama dotenv.js
dengan
isi sebagai berikut:
// load semua variabel env dari file .env
require('dotenv').config();
// mencetak variabel env
console.log("HOST: " + process.env.DB_HOST);
console.log("USER: " + process.env.DB_USER);
console.log("PASS: " + process.env.DB_PASS);
console.log("NAME: " + process.env.DB_NAME);
Lalu, buat file .env
dengan isi sebagai berikut:
DB_HOST=localhost
DB_USER=dian
DB_PASS=petanikode
DB_NAME=blog_nodejs
Setelah itu, coba eksekusi program dotenv.js
.
Mantap 👍
Saat baris ini dieksekusi, maka semua variabel yang ada
di dalam file .env
akan di-load ke dalam program atau memori.
require('dotenv').config();
Method config()
sebenarnya bisa juga diberikan parameter
untuk menentukan file .env
secara spesifik.
Contoh:
require('dotenv').config({path: '/full/custom/path/to/your/env/vars'})
Untuk parameter yang lain, kamu bisa membacanya di dokumentasi. 3
Oya, jika kamu
menggunakan Git,
pastikan memasukkan file .env
ke dalam .gitignore
agar tidak ikut direkam oleh Git.
Saat kita akan meng-hosting atau deploy aplikasi ke server…
…file .env
tidak perlu di-upload.
Nanti kita buat lagi variabel env di server.
Caranya bagaimana?
Caranya, tergantung dari server hosting yang digunakan.
Coba ikuti tutorial membuat bot dengan Hookio. Nanti akan tahu caranya.
Apa Selanjutnya?
Kita sudah tahu bagaimana cara menggunakan variabel env di
Nodejs sampai dengan menggunakan file .env
.
Selanjutnya, coba terapkan ini di dalam aplikasi yang akan kamu buat.
Semoga bermanfaat 🙏
Wikipedia. “Environment variable”. Retrieved 14 September 2018. ↩︎