Membuat Aplikasi Node JS Kita Menjadi Lebih Aman

Jika kita membicarakan hal terkait security pasti tidak akan pernah ada selesainya karena security merupakan salah satu dari hal terpenting yang wajib diimplementasikan tak terkecuali diaplikasi yang berbasis node.js sejak node.js banyak digunakan untuk membuat web applications dan juga web services atau aplikasi lainnya. Dengan mengimplementasikan javascript di sisi backend, node.js telah membawa resiko keamanan untuk aplikasi javascript disisi server. Memiliki sifat asynchronous, sebagian besar mekanisme tradisional tidak dapat diterapkan di aplikasi yang berbasis node.js. Dibawah ini ada beberapa tips dan trik untuk membuat aplikasi berbasis node.js milik kita menjadi lebih aman.

 
1. Mencegah Cross Site Scripting ( XSS )
Sejak node.js diimplementasikan dengan javascript, ada resiko cukup tinggi bahwa developers akan memberikan celah untuk XSS. Output encoding adalah salah satu cara terbaik untuk mencegah serangan XSS. Kita dapat menggunakan templating engine seperti jade yang telah menyediakan mekanisme encoding default. Tetapi kamu juga harus mengetahui beberapa situasi yang harus diperhatikan untuk mencegah XSS ini antara lain :
• Parameter encode URL yang digunakan sebagai parameter di URL. URL Encoding dapat dilakukan menggunakan fungsi native dari javascript seperti encodeURI() dan encodeURIComponent().
• Encoding parameter yang ditampilkan di HTML.
• Paramater CSS encode yang digunakan di element stylesheets.

 
2. Mencegah CSRF ( Cross Site Request Forgery )
Celah ini memungkinkan penyerang melakukan eksekusi fungsi tertentu pada aplikasi kita berdasarkan permintaan aplikasi kita sendiri. Untuk mencegah celah ini dapat menggunakan anti CSRF yang biasanya menggunakan sebuah token ketika mengirimkan suatu request sehingga server dapat melakukan validasi. Contoh implementasinya pun sangat mudah. Kita dapat menggunakan library yang telah ada seperti CSURF. Dibagian view, kita hanya perlu menambahkan field yang berisi token csrf yang akan divalidasi oleh server.

 

3. Mengamankan Session dan Cookie

Jika kamu menggunakan framework yang banyak orang lain yang menggunakannya seperti express.js, kamu perlu mengetahui beberapa hal terkait penamaan karena hal kecil ini dapat memberitahukan kepada orang lain terkait informasi teknologi apa yang kamu gunakan. Mengungkapkan teknologi yang kamu gunakan adalah salah satu hal yang tidak boleh kamu lakukan karena jika penyerang secara pasti mengetahui teknologi yang kamu gunakan, dia dapat dengan mudah menemukan komponen yang rentan didalam aplikasi kamu. Salah satunya adalah penamaan cookie session dari aplikasi kamu.

Kita bisa melihat contoh diatas bahwa nama cookie connect.sid adalah penamaan default dari express.js. Siapapun yang melihat ini dapat segera mengidentifikasi bahwa aplikasi ini menggunakan node.js. Jadi kita perlu mengganti nama cookie diatas dengan cara yang mudah seperti pada gambar dibawah ini.

Dengan cara tersebut, kita dapat mengganti penamaan default dari express menjadi sesuka kita. Contoh diatas cookie connect.sid akan berubah menjadi APP_KU_BROW.

 

4. Cross Origin Resource Sharing

Jika aplikasi kamu menggunakan sumber daya eksternal contohnya seperti google font atau asset – asset yang kamu simpan di layanan eksternal, kamu mungkin perlu untuk mendukung Cross Origin Resource Sharing. Dengan cors ini, kamu dapat membuat whitelist sumber daya eksternal yang kamu perlukan dan memblokir permintaan yang lainnya. Jika menggunakan node.js, kamu dapat dengan memudah melakukan management cors ini menggunakan module cors ( https://www.npmjs.com/package/cors ) yang ada di NPM.

 

5. Mencegah HTTP Parameter Pollution ( HPP )

HTTP parameter pollution adalah serangan yang memanfaatkan URL server side parameter dan menyerang kedalam aplikasi. Contoh saja kita mempunyai url seperti dibawah ini:

http://myapp.com/?firstname=’Rizki’&lastname=’Kudo’

Seorang penyerang akan mencoba menyerang dengan cara melakukan modifikasi terhadap url tersebut seperti contoh dibawah ini:

http://myapp.com/?firstname=’Rizki’&lastname=’Kudo’&firstname=’Gan’

Dalam hal ini penyerang memberikan parameter firstname menjadi 2 buah. Ini adalah salah satu dasar tentang HPP yang dapat dilakukan. Jika kita menggunakan express, server akan mengurai parameter itu menjadi seperti berikut

req.query.firstname = [Rizki, ‘Gan’]

req.query.lastname = ‘Kudo’

Jika kamu memaksudkan untuk menerima parameter itu dalam bentuk string tetapi dengan penambahan pada parameter itu membuat server menjadikan parameter itu dalam bentuk array. Skenario ini mungkin saja menyebabkan suatu masalah. Ada beberapa masalah yang akan muncul jika kamu tidak memberikan error handling dibagian tersebut yaitu :

  • Menyebabkan type error di aplikasi kamu.
  • Query pada database yang tak terduga.
  • Memodifikasi logika diaplikasi kamu.
  • Bypass melalui validasi
  • Dan masih banyak lagi.

Untuk mencegah serangan ini, kamu harus menerapkan validasi terhadap type pada nilai dari parameter – parameter yang ada sehingga kamu dapat mengidentifikasi serang HPP. Kamu juga dapat menggunakan library hpp yang terdapat di NPM seperti contoh dibawah ini.

 

6. Server Headers

  • Menonaktifkan X-Powered-By Header

X-Powered-By header mengungkap informasi yang tidak perlu tentang aplikasi kamu. Melihat header ini, penyerang dapat memetakan struktur aplikasi kamu dan merencanakan serangan yang lebih teroganisir. Dibawah ini adalah contoh menggunakan standart dari express.js.

Sedikit informasi ini akan menjadi sangat berharga karena penyerang akan dapat mengindentifikasi bahwa aplikasi kamu based on node.js. Penyerang juga dapat menyerang servermu jika kamu menggunakan versi yang usang dari node.js. Dalam express.js kita dapat menghapus header ini menggunakan code seperti dibawah ini.

app.disable(‘x-powered-by’)

  • Mengatur Keamanan di Headers

HTTP Server security memberikan peranan yang sangat penting dalam mengamankan aplikasi web. Header ini mempunyai fitur untuk melindungi aplikasi web kamu dari serangan di sisi client. Beberapa header untuk kemanan server yang penting adalah :

  • X-Frame-Options – Mencegah aplikasi kamu ditampilkan di iframes.
  • X-XSS-Protection – Memanggil mekanisme perlindungan untuk XSS di browser.
  • X-Content-Type-Options – Mencegah mime sniffing.

Mengatur header ini dapat dilakukan dengan mudah hanya dengan membuat middleware di aplikasi node.js kita. Contoh dibawah menggunakan express.js.

Selain cara di atas, kamu juga dapat menggunakan modul dari NPM yang disebut Helmet untuk melakukan organisasi terhadap header seperti menambahkan security headers, menghapus atau memodifikasi X-Powered-By header dan banyak fitur terkait keamanan lainnya. Contoh penggunakan helmet seperti pada gambar dibawah ini.

 

7. NPM Modules Yang Membantu.

  • CSURF : Implementasi Anti-CSRF Tokens untuk mencegah cross site request forgery.
  • CORS : Mengaktifkan cross origin resource sharing.
  • HPP : Melindungi dari HTTP Parameter Pollution.
  • Express-Content-Length-Validator : Mencegah serangan DOS.
  • Rate-Limiter : Mencegah serangan DOS.
  • Helmet : Mengatur custom security headers.
  • NSP : Scanning deprecated/vulnerable NPM modules diaplikasi kita.
  • Retire : Scanning deprecated/vulnerable NPM modules diaplikasi kita.

Masih banyak lagi tips dan trik untuk security di node js tetapi semoga beberapa tips dan trik di atas dapat membantu menjadikan aplikasi node.js kita menjadi lebih aman.

Referensi :

  1. https://expressjs.com/en/advanced/best-practice-security.html
  2. https://blog.risingstack.com/node-hero-node-js-security-tutorial/
  3. https://nodesource.com/blog/nine-security-tips-to-keep-express-from-getting-pwned/

Comments

comments

rizkiimam

You Might Also Like

No Comment

Leave your thought