author Ahmad Muhardian

Belajar Nodejs #10: Gunakan Environment Variable untuk Mengamankan Aplikasimu


Menggunakan Variabel Env di Nodejs

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.

Environment Variabel di Windows

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.

Environment Variabel di 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.

Environment Variabel di Linux

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.

Eksekusi program nodejs untuk mengakses env variabel

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:

Eksekusi program nodejs untuk mengakses env variabel

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.

Membuat variabel env dari Nodejs

…dan coba gunakan perintah echo untuk mencetaknya:

Mencetak variabel env

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.

Sifat Variabel Env

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.

Instalasi Modul dotenv

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.

Program dotenv nodejs

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 🙏