‫Jadi, semua yang kami lakukan di bagian
‫ini sejauh ini adalah
‫mengamankan semua aplikasi dan data pengguna kami sebaik mungkin.
‫Dan saya berbicara tentang banyak hal yang
‫dapat kita lakukan untuk mencapai itu.
‫Tapi semua informasi ini
‫tersebar di seluruh kuliah ini.
‫Jadi saya memutuskan untuk membuat ringkasan singkat
‫ini dengan banyak praktik terbaik yang telah kami terapkan
‫dan yang masih akan kami terapkan
‫di sisa bagian ini.
‫Karena keamanan sangat penting,
‫tetapi sayangnya, banyak kursus tidak cukup membahasnya.
‫Sekarang, saya juga
‫tidak mengubah Node ini. js kursus menjadi kursus keamanan.
‫Ada kursus dan ahli yang lebih baik untuk itu.
‫Tetapi saya akan menunjukkan kepada Anda
‫beberapa hal yang dapat Anda lakukan untuk mengamankan aplikasi dan data Anda dengan benar.
‫Dan saya akan melihat beberapa serangan
‫umum dan memberikan beberapa saran untuk mencegahnya.
‫Dan pertama-tama, kami memiliki peristiwa database yang dikompromikan,
‫yang berarti bahwa penyerang memperoleh akses ke database kami.
‫Tentu saja, ini adalah masalah yang sangat parah, tetapi
‫untuk mencegah masalah yang lebih besar,
‫kita harus selalu mengenkripsi kata sandi dan token pengaturan ulang kata sandi
‫seperti yang kita lakukan di video di bagian ini.
‫Dengan cara ini, penyerang setidaknya
‫tidak dapat mencuri kata sandi pengguna kami dan juga tidak dapat mengatur ulang.
‫Sekarang, tentang benar-benar mencegah serangan, mari
‫kita bicara tentang serangan brute force
‫di mana penyerang pada dasarnya mencoba menebak kata
‫sandi dengan mencoba jutaan kata sandi acak sampai
‫mereka menemukan yang benar.
‫Dan yang bisa kita lakukan adalah membuat permintaan login menjadi sangat lambat.
‫Dan paket bcrypt yang
‫kami gunakan sebenarnya melakukan hal itu.
‫Strategi lain adalah menerapkan pembatasan tarif, yang
‫membatasi jumlah permintaan yang
‫datang dari satu IP tunggal.
‫Dan yang satu ini akan
‫kita terapkan di salah satu video berikutnya.
‫Juga, strategi yang bagus adalah dengan
‫benar-benar menerapkan jumlah maksimum upaya login untuk setiap pengguna.
‫Sebagai contoh, kita dapat membuatnya
‫sehingga setelah 10 kali percobaan gagal, pengguna
‫harus menunggu satu jam sampai ia dapat mencoba lagi.
‫Sekarang, saya tidak akan
‫menerapkan fungsi ini di bagian
‫ini, tetapi silakan bereksperimen sendiri.
‫Ini mungkin pengalaman belajar yang sangat keren untuk
‫membuat kode ini sendiri, dan
‫sebenarnya tidak terlalu sulit.
‫Baiklah.
‫Selanjutnya, ada serangan skrip lintas situs, di
‫mana penyerang
‫mencoba menyuntikkan skrip ke halaman kami untuk menjalankan kode berbahayanya.
‫Di sisi klien, ini sangat berbahaya
‫karena memungkinkan penyerang membaca penyimpanan lokal, itulah
‫alasan mengapa kita
‫tidak boleh menyimpan token web JSON di penyimpanan lokal.
‫Sebaliknya, itu harus disimpan dalam cookie khusus HTTP yang membuatnya
‫sehingga browser hanya dapat
‫menerima dan mengirim cookie tetapi
‫tidak dapat mengakses atau memodifikasinya dengan cara apa pun.
‫Jadi, hal itu membuat penyerang tidak
‫mungkin mencuri token web JSON yang disimpan dalam cookie.
‫Sekali lagi, kami menerapkan ini dalam hitungan detik.
‫Sekarang, di sisi backend, untuk mencegah serangan XSS, kita harus
‫membersihkan data input pengguna
‫dan mengatur beberapa header HTTP khusus
‫yang membuat serangan ini sedikit lebih sulit terjadi.
‫Dan Express tidak datang dengan praktik terbaik
‫ini, jadi kami akan menggunakan middleware untuk
‫mengatur semua header khusus ini.
‫Selanjutnya, kami memiliki serangan penolakan layanan.
‫Dan mungkin Anda pernah mendengar tentang ini.
‫Itu terjadi ketika
‫penyerang mengirim begitu banyak permintaan ke server yang
‫rusak dan aplikasi menjadi tidak tersedia.
‫Sekali lagi, menerapkan pembatasan tingkat
‫adalah solusi yang baik untuk ini.
‫Selain itu, kami harus membatasi jumlah
‫data yang dapat dikirim dalam badan di pos atau permintaan tambalan.
‫Dan juga, kita harus menghindari menggunakan
‫apa yang disebut ekspresi reguler jahat dalam kode kita.
‫Dan ini hanyalah ekspresi reguler
‫yang membutuhkan waktu eksponensial untuk dijalankan untuk input yang
‫tidak cocok dan dapat dieksploitasi untuk menurunkan seluruh aplikasi kita.
‫Oke, selanjutnya, kita memiliki serangan injeksi kueri NoSQL.
‫Dan injeksi kueri terjadi ketika penyerang,
‫alih-alih memasukkan data yang valid, menyuntikkan beberapa kueri untuk
‫membuat ekspresi kueri
‫yang akan diterjemahkan menjadi true.
‫Misalnya, untuk masuk bahkan tanpa
‫memberikan nama pengguna atau kata sandi yang valid.
‫Ini agak rumit
‫dan Anda harus mencarinya di Google untuk mempelajari lebih lanjut.
‫Tetapi yang perlu Anda ketahui adalah bahwa menggunakan
‫Mongoose sebenarnya adalah strategi
‫yang cukup bagus untuk mencegah serangan semacam
‫ini karena skema yang baik memaksa setiap nilai untuk
‫memiliki tab data yang terdefinisi dengan baik.
‫Yang kemudian secara efektif
‫membuat serangan jenis ini sangat sulit untuk dieksekusi.
‫Namun, itu selalu merupakan ide yang
‫baik untuk tetap membersihkan data input, hanya untuk memastikan.
‫Dan kami akan mengurusnya nanti.
‫Baiklah, dan sekarang
‫untuk menyelesaikannya, saya hanya memiliki beberapa praktik
‫terbaik dan saran tentang cara
‫meningkatkan mekanisme otentikasi dan otorisasi yang kami terapkan.
‫Jadi, hal pertama
‫yang harus saya ulangi
‫berulang-ulang adalah bahwa dalam aplikasi
‫produksi, semua komunikasi antara server dan
‫klien perlu terjadi melalui HTTPS.
‫Jika tidak, siapa pun dapat mendengarkan percakapan dan
‫mencuri token web JSON kami.
‫Selanjutnya, selalu buat token kata sandi acak.
‫Tidak dihasilkan dari tanggal atau sesuatu seperti itu.
‫Karena mereka adalah kata sandi yang
‫efektif dan karenanya, mereka harus diperlakukan seperti itu.
‫Plus, selalu beri mereka tanggal kedaluwarsa,
‫seperti yang kami terapkan.
‫Baiklah?
‫Dan kami juga menerapkan bahwa token web
‫JSON tertentu tidak lagi valid setelah pengguna mengubah kata sandinya.
‫Jadi, pada dasarnya kami mencabut
‫token segera setelah pengguna mengubah kata sandi.
‫Yang sangat masuk akal, tetapi sekali
‫lagi, banyak tutorial di luar sana tidak melakukan itu.
‫Hal besar lainnya adalah jangan pernah
‫melakukan file konfigurasi, seperti untuk variabel lingkungan, ke
‫kontrol versi seperti Git.
‫Bahkan, jangan mengunggahnya di mana pun
‫karena file
‫ini berisi data paling sensitif dari seluruh aplikasi.
‫Misalnya, jika seseorang mendapatkan akses ke
‫rahasia token web
‫JSON Anda, maka seluruh proses autentikasi Anda akan terganggu.
‫Oke, dan sekarang hanya detail kecil adalah setiap
‫kali ada kesalahan,
‫jangan kirim seluruh kesalahan ke klien.
‫Jadi, hal-hal seperti pelacakan tumpukan dapat memberi penyerang
‫beberapa wawasan berharga ke dalam sistem Anda,
‫jadi, tentu saja, kami tidak menginginkannya.
‫Selanjutnya, kita dapat menggunakan paket csurf
‫untuk melawan jenis serangan yang disebut Cross-Site Request Forgery, yaitu
‫serangan yang memaksa pengguna untuk melakukan
‫tindakan yang tidak diinginkan pada aplikasi web tempat
‫mereka sedang login.
‫Kami tidak akan melakukannya di bagian ini.
‫Tapi saya masih ingin menyebutkannya di sini.
‫Selanjutnya, kami dapat meminta
‫pengguna untuk mengautentikasi ulang sebelum melakukan tindakan bernilai tinggi.
‫Misalnya, melakukan pembayaran atau menghapus sesuatu.
‫Sekali lagi, ini hanya saran yang
‫bisa Anda coba sendiri.
‫Fitur keren lainnya yang dapat Anda
‫terapkan adalah daftar hitam token yang tidak dipercaya.
‫Jadi, kita sudah tahu bahwa
‫sebenarnya tidak ada cara untuk mengeluarkan pengguna dari
‫aplikasi jika mereka menunjukkan aktivitas jahat.
‫Tapi yang bisa kita lakukan adalah membuat daftar token tidak
‫tepercaya yang kemudian divalidasi pada setiap permintaan.
‫Dan selanjutnya, fitur yang bisa kita terapkan
‫adalah mengkonfirmasi alamat email setelah akun pertama kali dibuat.
‫Jadi, pada dasarnya dengan mengirimkan tautan ke email
‫pengguna, seperti yang dilakukan oleh banyak aplikasi nyata.
‫Tapi saya ingin membuat semuanya sederhana di sini,
‫itulah sebabnya saya tidak melakukannya di sini.
‫Tapi jangan ragu untuk menerapkan ini
‫sendiri jika Anda mau.
‫Sekarang, fitur besar yang dimiliki
‫banyak aplikasi adalah konsep token penyegaran.
‫Yang pada dasarnya adalah untuk mengingat pengguna.
‫Jadi, untuk membuat mereka tetap
‫masuk selamanya atau sampai mereka memilih untuk keluar.
‫Implementasi kami saat ini
‫membuatnya sehingga pengguna pada dasarnya harus masuk
‫lagi setelah token web JSON kedaluwarsa.
‫Namun, dengan token penyegaran, itu tidak lagi diperlukan.
‫Dan itu agak rumit untuk diterapkan dan, ini
‫adalah fitur untuk lain waktu.
‫Dan terakhir, yang
‫terakhir yang bisa kita terapkan adalah otentikasi dua faktor, yang
‫saya yakin Anda sudah familiar dengannya.
‫Pada dasarnya, dengan otentikasi
‫dua faktor, setelah masuk ke aplikasi,
‫pengguna perlu
‫melakukan tindakan kedua untuk benar-benar mendapatkan otentikasi.
‫Dan biasanya, yaitu memasukkan kode
‫yang dikirim melalui pesan teks ke ponsel.
‫Jadi, ini adalah banyak fungsi yang
‫dapat dimiliki oleh otentikasi kami.
‫Dan jika Anda ingin saya menerapkannya,
‫beri tahu saya di bagian Tanya Jawab.
‫Dan, jika ada banyak permintaan untuk salah satunya,
‫maka saya akan menunjukkan cara kerjanya.
‫Oke, tapi sekali lagi, saya tidak ingin mengubah
‫Node ini. kursus js
‫menjadi kursus keamanan dan otentikasi secara keseluruhan.
‫Dan sebagai penutup, sesuatu yang akan kita terapkan
‫di sisa bagian ini
‫adalah untuk mencegah polusi parameter.
‫Misalnya, coba masukkan dua parameter bidang saja ke dalam
‫string kueri yang menelusuri semua tur.
‫Dan jika Anda melakukan itu, Anda akan
‫menemukan bahwa akan ada
‫kesalahan karena aplikasi kami tidak siap untuk itu.
‫Jadi, penyerang mencoba menggunakan kelemahan semacam ini untuk membuat
‫aplikasi crash, yang tentu saja tidak bagus.
‫Jadi, kita perlu memperbaikinya.
‫Oke, jadi ini ternyata jauh lebih lama dari yang saya harapkan.
‫Dan ada banyak kursus tentang keamanan jika
‫Anda benar-benar menyukai keamanan.
‫Baiklah, tapi saya akan berhenti di
‫sini, jadi, sekarang mari kita lanjutkan ke yang berikutnya.