Melindungi aplikasi web Anda: cara menutupnya dari gangguan pihak ketiga

gambar

Dari seorang penerjemah: kami menerbitkan sebuah artikel untuk Anda oleh Jim Medlock, seorang programmer dan arsitek perangkat lunak. Medlock berbicara tentang cara dasar untuk melindungi aplikasi atau layanan web Anda. Perlu dicatat bahwa materi ini mungkin berguna bagi programmer pemula. Meskipun jika pro meninggalkan komentar mereka, semua orang akan berterima kasih.

Kenapa repot-repot dengan siapa pun meretas aplikasi? Ya, jika hanya karena ada semakin banyak orang yang ingin melakukan ini dari waktu ke waktu. Ini adalah peretas "biasa" yang mengatasi perlindungan seseorang adalah kepentingan olahraga, penjahat dunia maya yang merusak layanan dan situs demi keuntungan, organisasi pemerintah.

Selama beberapa bulan terakhir, banyak organisasi besar mendapat berita setelah banyak informasi bocor. Di antaranya, Facebook dan 50 juta akun curiannya, FIFA dengan 3,4 TB data dan 70 juta dokumen, Google dengan 0,5 juta akun, Marriott Hotel dengan data dari 427 juta pelanggan dari seluruh jaringan.

Skillbox merekomendasikan: Kursus praktis dua tahun "Saya seorang Pengembang Web PRO . "

Kami mengingatkan Anda: untuk semua pembaca "Habr" - diskon 10.000 rubel saat mendaftar untuk kursus Skillbox apa pun menggunakan kode promosi "Habr".


Sumber

Tidak hanya jumlah serangan hacker yang meningkat, tetapi juga jumlah kerusakan yang dilakukan penjahat cyber. Menurut para ahli, ukuran rata-rata kerugian langsung dan tidak langsung yang disebabkan oleh penjahat cyber adalah $ 3,86 juta per satu peretasan yang berhasil. Tentu saja, ini adalah rata-rata pasar; bilangan real bervariasi, dan cukup banyak.

Beberapa statistik lagi. Kerusakan yang disebabkan oleh penjahat dunia maya dapat dinilai dengan data berikut:

  • $ 148 - "harga" dari satu akun yang dicuri;
  • $ 40 juta - untuk 1 juta akun;
  • $ 350 juta - untuk 50 juta akun.



Uang bukan satu-satunya argumen: pikirkan berapa lama waktu yang dibutuhkan untuk mengatur semuanya.

Keamanan Infrastruktur vs. keamanan aplikasi




Sebagian besar langkah-langkah keamanan ditujukan untuk melindungi dasar infrastruktur TI, seperti server, penyimpanan, pusat data. Itu perlu, tetapi bukan hanya mereka yang harus dilindungi.

Langkah-langkah keamanan mengenai aplikasi itu sendiri juga sangat penting. Mereka menyediakan serangkaian metode untuk menemukan, memperbaiki, dan mencegah penggunaan celah berbahaya dalam perangkat lunak Anda. Layak menyoroti ini:

  • tinjauan kode dilakukan oleh spesialis keamanan informasi, ketika tujuannya secara eksklusif untuk mencari tempat-tempat yang bermasalah dalam hal keamanan siber;
  • Audit berbasis blackbox berdasarkan pekerjaan dengan aplikasi;
  • tinjauan arsitektur aplikasi sebelum menulis sebagian besar kode;
  • penggunaan alat otomatis yang membantu mengevaluasi perlindungan;
  • peluncuran program karunia yang memungkinkan spesialis pihak ketiga untuk menemukan area masalah.

Langkah-langkah paling efektif didasarkan pada konsep keamanan lapis demi lapis. Dalam hal ini, masing-masing elemen yang dilindungi menggunakan seperangkat alatnya sendiri.



Anda tidak dapat melakukan apa pun dengan sisi klien


Masalahnya adalah Anda tidak mungkin dapat melindungi proyek Anda di sisi pengguna. Browser modern rentan, terlepas dari upaya pencipta mereka.

Dalam hal layanan web, komponen yang lemah dari keseluruhan sistem adalah kunci yang diperlukan untuk otorisasi. Misalnya, aplikasi yang menggunakan API GitHub harus mendukung otentikasi token. Jika pelaku bisa mendapatkan kunci di tangannya, maka ia akan memiliki semua akses ke kode dan proyek-proyek korban di GitHub.

Untuk pengembang frontend, bahayanya adalah bahwa ia dapat memastikan keamanan lengkap layanannya jika langkah-langkah seperti kunci pribadi dan token disediakan. Semua ini bagus, tetapi semua browser yang sama adalah tautan yang lemah.

Apakah aman untuk memisahkan data keamanan seperti kunci dari seluruh proyek?


Biasanya, variabel lingkungan digunakan untuk mengekstraksi data ke file, seperti .env. Langkah tambahan adalah menambahkan nama file tersebut ke .gitignore, yang mencegah eksekusi perintah git push untuk mengunggah ke repositori publik, di mana file tersebut akan terbuka untuk semua orang.



Semua ini baik, tetapi file .env tidak dienkripsi. Dalam kasus Create React App, mereka dapat diperiksa menggunakan opsi Developer Tools di browser, di direktori build / static / js. Di sini, misalnya, adalah apa yang kami temukan ketika memeriksa 0.chunk.js.



Seperti yang Anda lihat, pendekatan ini tidak memberikan keuntungan khusus, dalam beberapa kasus lebih baik menyimpan elemen keamanan penting dalam kode sumber. Ada skenario menarik lainnya di mana pemisahan kode digunakan untuk menunda memuat skrip yang berisi variabel lingkungan hingga pengguna mengautentikasi aplikasi. Tetapi jika komputer klien dikompromikan, tidak ada yang akan berhasil - setelah semua, sistem file-nya dapat diakses oleh penyusup.

Solusi




Berbeda dengan bagian klien, aplikasi server dapat dilindungi sehingga data penting tidak jatuh ke tangan penyerang. Untuk melakukan ini, Anda dapat menggunakan Oauth untuk mendapatkan tingkat otentikasi tambahan dan kontrol akses, enkripsi dan protokol seperti HTTPS dan TLS.



Dilema pengamanan rahasia aplikasi dapat diatasi dengan mengimplementasikan API sisi server. Pada saat yang sama, ia bertindak sebagai server proxy untuk mengisolasi aplikasi klien dari penyedia layanan, yang digunakannya. Alih-alih menggunakan data pribadi di sisi klien untuk mengautentikasi dalam layanan, API mengautentikasi dari aplikasi server, mengeksekusi permintaan, dan hanya kemudian mengembalikan hasilnya ke klien. Kunci pribadi atau data lain tidak diungkapkan kepada yang terakhir dalam keadaan apa pun.

Pendekatan terintegrasi




Ya, kompleksitas bukan hanya kata-kata. Untuk memberikan kepercayaan kepada para pengguna akan perlindungan data yang dapat diandalkan, perencanaan yang cermat, strategi keamanan yang dipikirkan dengan matang, yang didasarkan pada perlindungan yang mendalam dan perhatian terhadap detail, diperlukan.

Tidak cukup hanya mengandalkan "pulau teknologi". Hal ini diperlukan untuk menghubungkan semua elemen bersama, memahami bagaimana keseluruhan sistem akan bekerja.

Hanya dalam hal ini aplikasi atau layanan akan aman.

Source: https://habr.com/ru/post/id433538/


All Articles