Studi Keamanan Kontras menemukan bahwa 90% aplikasi tidak diuji untuk kerentanan dalam pengembangan dan QA. Lebih sering, kerentanan ini diabaikan selama proses produksi. Ini menggambarkan mengapa kerangka kerja pengembangan aplikasi harus aman.
AngularJS, kerangka kerja front-end JavaScript open-source, tersedia untuk semua pengembang dan merupakan pilihan yang baik untuk pengembangan web. Ini memungkinkan pengembang untuk memisahkan templat HTML dan menyediakan opsi pengikatan data yang nyaman di sisi klien. Ini membuat pengembangan lebih mudah. Ini memiliki beberapa fitur keamanan, seperti pengkodean keluaran otomatis dan pelarian kontekstual yang ketat. Namun, ia juga memiliki kebijakan keamanan konten (CSP) bawaan. Masalah-masalah ini perlu ditangani.
Keamanan AngularJS adalah dasar untuk keamanan aplikasi. Oleh karena itu, sangat penting untuk memprioritaskan dan bekerja pada keamanan AngularJS. Anehnya, hanya 43% pengembang yang mengatakan bahwa mereka menggunakan praktik pengkodean yang aman dibandingkan dengan 55% manajer. Namun, 79% setuju bahwa kode tertentu menjadi lebih kritis. Ini menyisakan banyak ruang untuk memahami dan menerapkan praktik terbaik dalam keamanan aplikasi, terutama dari sudut pandang AngularJS.
AngularJS menggunakan gaya sebaris yang dapat dilewati penyerang dengan mudah menggunakan konten yang disuntikkan khusus. Area umum yang sangat rentan termasuk Cross-site scripting (XSS), kontaminasi prototipe, Denial of Service, DoS, Clickjacking dan deserialisasi objek tidak aman, bypass Perlindungan, injeksi skrip arbitrer, dan eksekusi perintah berbahaya.
Penyerang dapat mengontrol template dengan:
- Menghasilkan template dari server dengan konten yang disediakan pengguna.
- Menghasilkan ekspresi menggunakan informasi yang disediakan pengguna dalam panggilan ke metode tertentu, panggilan ke layanan yang mengurai ekspresi atau sebagai predikat untuk dipesan oleh
- Sandbox, mesin virtual yang mengeksekusi kode perangkat lunak yang berpotensi berbahaya tanpa berdampak pada aplikasi lokal, tidak membantu di sini. Misalnya, ekspresi AngularJS tidak dapat mengevaluasi ekspresi yang tidak aman. Selanjutnya, kotak pasir mencegah akses ke konstruktor Fungsi, objek jendela dan elemen DOM, variabel global, dan konstruktor Objek. Akibatnya, penyerang hanya dapat menjalankan fungsi yang ada, menampilkan/memodifikasi data dari variabel lingkup atau melakukan fungsi matematika. Ini secara dramatis mengurangi dampak serangan. Namun, ini tidak cukup karena penyerang dapat membobol kotak pasir untuk mengeksekusi JavaScript berbahaya di dalam halaman HTML. Oleh karena itu, kotak pasir tidak cukup untuk Keamanan AngularJS.
Bagaimana Mengamankan Aplikasi AngularJS?
Untuk meningkatkan posisi Keamanan AngularJS Anda, pengembang didorong untuk menggunakan praktik terbaik berikut:
Pelajari dasar-dasarnya
Sangat penting untuk merancang aplikasi untuk mencegah penyerang mengubah template sisi klien. Praktik yang baik meliputi:
- Tidak mencampur template server dan klien untuk menghindari kerentanan XSS.
- Tidak menggunakan input pengguna dalam pembuatan template dinamis.
- Menggunakan CSP yang terintegrasi.
Hindari kustomisasi
Versi terbaru dan rilis pustaka AngularJS adalah cara yang bagus untuk mendapatkan fitur yang berfokus pada keamanan. Untuk pembaruan dan tambalan keamanan, pastikan Anda memeriksa Angular Memperbarui catatan. Yang terbaik adalah menghindari menyesuaikan perpustakaan untuk memenuhi kebutuhan khusus. Ini menghadirkan dua tantangan: Masalah dengan memutakhirkan ke versi AngularJS yang lebih lama. Patch keamanan yang diperlukan tidak ada.
Manfaatkan fitur keamanan default dari AngularJS
Opsi default AngularJS mencakup pengkodean output otomatis dan sanitasi input konteks-sadar. Ini berguna dalam mengurangi kelemahan XSS. Semua simbol tidak aman dan huruf kontrol HTML dikodekan. Ini dapat digunakan bersama dengan ng-bind
Batasi penggunaan DOM API
Hindari injeksi terkait DOM Angular atau penggunaan langsung API DOM. Sebagai gantinya, gunakan templat Angular untuk berinteraksi dengan DOM. API dan pustaka pihak ketiga dapat memperkenalkan metode yang tidak aman kecuali Anda menerapkan ‘Jenis Tepercaya’. Pastikan untuk membersihkan nilai yang tidak tepercaya dengan DomSanitizer.sanitize. API sudut dapat menimbulkan risiko keamanan, terutama ElementRef, yang memberikan akses langsung ke DOM. Anda juga dapat menggunakan opsi asli seperti pengikatan data atau templating.
Injeksi Leverage Template dan tetap menggunakan template internal
Template Injection adalah kompiler template offline yang dapat meningkatkan kinerja dan memberikan fitur keamanan. Direkomendasikan untuk digunakan dalam penyebaran produksi. Pilihan lainnya adalah menggunakan compiler Ahead of Time Angular, yang dapat digunakan secara offline untuk mengkompilasi template. Pengembang cenderung memuat template dari berbagai sumber. Domain yang tidak tepercaya dapat menyebabkan lebih banyak kerentanan. Biasakan untuk menjalankan pemindaian reguler dan memperbaiki paket perangkat lunak sumber terbuka pihak ketiga.
Gunakan template dalam satu konteks untuk menghindari pola yang tidak aman
Pola seperti window.location.href=$location.hash bisa menjadi undangan bagi para hacker. Hindari injeksi kode JavaScript dan pengalihan terbuka. Sebagai gantinya, gunakan peta kamus untuk menyediakan referensi halaman dan navigasi. Injeksi kode sisi server dapat dikurangi dengan hanya memperlakukan template dalam satu konteks klien atau server. Terakhir, hindari menggunakan Angular’s Sudut.elemen() API yang kompatibel dengan jQuery untuk manipulasi DOM. API ini dapat membuat elemen HTML langsung di DOM, yang semakin meningkatkan kerentanan XSS.
Gunakan antar keamanan
Linter keamanan memungkinkan pengembang untuk menganalisis kode statis dan menandai kesalahan, bug, atau kerentanan keamanan. Dalam kasus AngularJS, kita berbicara tentang ‘eslint-plugin-scan-rules‘ dan ‘eslint-plugin-sudut‘, yang membantu dengan konvensi pengkodean umum, aturan, dan pedoman seputar keamanan.
Lihatlah fitur keamanan bawaan
Anda dapat menggunakan fitur cross-site request forgery token (CSRF) AngularJS, dan cross-site script incorporation (XSSI) untuk mengurangi kerentanan tingkat HTTP. CSRF adalah ketika penyerang mengarahkan pengguna ke halaman berbahaya dan mengirim permintaan berbahaya ke server. Pengembang dapat menggunakan token autentikasi yang dibuat secara otomatis untuk memeriksa header asal yang dikirim dari browser pengguna. Selain itu, mereka dapat membuat token autentikasi hanya dapat dilihat oleh aplikasi mereka. Untuk menentukan apakah nilai token pada sisi klien dan server cocok, CSRF akan membandingkannya. Namun, pengembang sisi server harus mengimplementasikan fungsi ini sendiri.
DomSantizer: Bagaimana cara menggunakannya dengan benar?
Serangan pencurian data yang paling populer adalah serangan XSS, di mana peretas menyisipkan skrip dalam elemen DOM pada paket tertentu. Serangan malware dan pencurian data adalah mimpi buruk terburuk berikutnya. Oleh karena itu, disarankan untuk membersihkan input yang tidak tepercaya (termasuk memeriksa dan mengubahnya menjadi nilai yang aman) di seluruh HTML, CSS, dan URL Sumber Daya. DomSanitizer bisa menjadi pilihan yang bagus. Ini adalah tiga fungsi yang paling penting:
Apa Masa Depan Keamanan AngularJS?
Intervensi manusia untuk memantau lalu lintas masuk bukanlah pilihan ketika begitu banyak aplikasi sedang dikembangkan dengan cepat. Perlindungan Diri Aplikasi Runtime ada di sini untuk membantu. RASP mencegat semua panggilan ke aplikasi dan memeriksa malwares dan ancaman, tidak seperti firewall tujuan umum dan Firewall Aplikasi Web yang memblokir semua lalu lintas yang mencurigakan tetapi hanya melihat perimeter. Selain itu, terintegrasi dengan aplikasi sehingga dapat melindungi aplikasi dari kerentanan yang diketahui dan melindunginya dari serangan yang tidak diketahui.
Ini instan, tidak memerlukan campur tangan manusia, dan menyediakan layanan kontekstual. Ini termasuk informasi dari konfigurasi sistem, API, basis kode, dan basis kode. Selain itu, tertanam dalam aplikasi untuk membatasi positif palsu dan melacak perilaku yang tidak diinginkan.
Itu dapat melindungi aplikasi web dan non-web dan mengamankan sistem bahkan jika penyerang telah menembus pertahanan perimeter. Selain itu, logika aplikasi, konfigurasi, dan wawasan aliran data memberikan akurasi yang lebih baik dalam deteksi dan pencegahan ancaman.
Angular menganggap semua nilai tidak dipercaya secara default untuk mencegah bug XSS. Angular akan menghapus nilai yang tidak tepercaya dari DOM saat kesepakatan dimasukkan menggunakan pengikatan atau interpolasi template. Jika suatu nilai telah dibersihkan oleh Angular dan aman digunakan, beri tahu Angular dengan menandainya sebagai tepercaya.
Templat sudut dapat merender nilai yang berbeda dari yang Anda masukkan. Oleh karena itu, mereka harus diperlakukan sebagai kode yang dapat dieksekusi. Jangan pernah menggabungkan input pengguna dengan sintaks template untuk membuat template. Ini akan memungkinkan penyerang untuk menyuntikkan kode arbitrer ke dalam aplikasi Anda. Kerentanan ini dapat dicegah dengan menggunakan compiler AOT default untuk penyebaran produksi.
Perlindungan tambahan dapat ditambahkan dengan menggunakan Kebijakan keamanan konten dan jenis Tepercaya. Karena tidak dapat dilewati dengan API tingkat rendah, fitur platform web ini adalah tempat terbaik untuk mencegah serangan XSS. Kami mendorong pengembang untuk menggunakan fitur ini untuk mengonfigurasi kebijakan keamanan konten dalam aplikasi mereka dan mengaktifkan penegakan jenis tepercaya.
Apa Praktik Terbaik untuk Menghindari Pelanggaran Keamanan dengan AngularJS?
- Tetap terkini dengan versi perpustakaan Angular terbaru. Pembaruan ini dapat memperbaiki masalah keamanan yang ditemukan di versi yang lebih lama. Untuk pembaruan terkait keamanan, periksa Angular Changelog.
- Jangan ubah salinan Angular Anda. Versi yang disesuaikan cenderung lebih lambat daripada versi saat ini dan mungkin tidak memiliki peningkatan dan perbaikan keamanan. Sebagai gantinya, buat permintaan tarik untuk membagikan peningkatan Angular Anda dengan komunitas.
- Jangan gunakan API Angular yang ditandai sebagai “Risiko keamanan.” Untuk mempelajari lebih lanjut, silakan merujuk ke bagian Trusting, safe value.
Mengaudit Aplikasi Sudut
Aplikasi sudut harus mengikuti prinsip keamanan yang sama seperti aplikasi web biasa dan diaudit sesuai dengan itu. API sensitif keamanan di Angular yang perlu ditinjau dalam tinjauan keamanan, seperti metode bypassSecurityTrust, harus ditandai dalam dokumentasi.
Kami telah membahas lebih banyak kiat dan peretasan dalam hal ini bagian.