Bagikan melalui


Panduan pengkodan aman

Sebagian besar kode aplikasi cukup menggunakan infrastruktur yang diimplementasikan oleh .NET. Dalam beberapa kasus, keamanan khusus aplikasi tambahan diperlukan, dibangun baik dengan memperluas sistem keamanan atau dengan menggunakan metode ad hoc baru.

Dengan menggunakan izin yang diberlakukan .NET dan penegakan lain dalam kode Anda, Anda harus membuat penghalang untuk mencegah kode berbahaya mengakses informasi yang tidak Anda inginkan untuk memiliki atau melakukan tindakan lain yang tidak diinginkan. Selain itu, Anda harus mencapai keseimbangan antara keamanan dan kegunaan dalam semua skenario yang diharapkan menggunakan kode tepercaya.

Gambaran umum ini menjelaskan berbagai cara kode dapat dirancang untuk bekerja dengan sistem keamanan.

Mengamankan akses sumber daya

Saat merancang dan menulis kode Anda, Anda perlu melindungi dan membatasi akses yang dimiliki kode tersebut ke sumber daya, terutama saat menggunakan atau memanggil kode asal yang tidak diketahui. Jadi, perlu diingat teknik berikut untuk memastikan kode Anda aman:

  • Jangan gunakan Keamanan Akses Kode (CAS).

  • Jangan gunakan kode tepercaya parsial.

  • Jangan gunakan atribut AllowPartiallyTrustedCaller (APTCA).

  • Jangan gunakan .NET Remoting.

  • Jangan gunakan Model Objek Komponen Terdistribusi (DCOM).

  • Jangan gunakan formatter biner.

Keamanan Akses Kode dan kode Security-Transparent tidak dianggap sebagai pembatas keamanan ketika menggunakan kode dengan kepercayaan parsial. Kami menyarankan untuk tidak memuat dan mengeksekusi kode asal yang tidak diketahui tanpa menerapkan langkah-langkah keamanan alternatif. Langkah-langkah keamanan alternatif adalah:

  • Virtualisasi

  • Kontainer Aplikasi

  • Pengguna dan izin sistem operasi (OS)

  • Hyper-V kontainer

Kode netral keamanan

Kode netral keamanan tidak melakukan apa pun secara eksplisit dengan sistem keamanan. Ini berjalan dengan izin apa pun yang diterimanya. Meskipun aplikasi yang gagal menangkap pengecualian keamanan yang terkait dengan operasi yang dilindungi (seperti menggunakan file, jaringan, dan sebagainya) dapat mengakibatkan pengecualian yang tidak tertangani, kode netral keamanan masih memanfaatkan teknologi keamanan di .NET.

Pustaka netral keamanan memiliki karakteristik khusus yang harus Anda pahami. Misalkan pustaka Anda menyediakan elemen API yang menggunakan file atau memanggil kode yang tidak dikelola. Jika kode Anda tidak memiliki izin yang sesuai, kode tersebut tidak akan berjalan seperti yang dijelaskan. Namun, bahkan jika kode memiliki izin, kode aplikasi apa pun yang memanggilnya harus memiliki izin yang sama untuk bekerja. Jika kode panggilan tidak memiliki izin yang tepat, SecurityException muncul sebagai hasil dari pengecekan tumpukan keamanan akses kode.

Kode aplikasi yang bukan komponen yang dapat digunakan kembali

Jika kode Anda adalah bagian dari aplikasi yang tidak akan dipanggil oleh kode lain, keamanan sederhana dan pengodean khusus mungkin tidak diperlukan. Namun, ingat bahwa kode berbahaya dapat memanggil kode Anda. Meskipun keamanan akses kode mungkin menghentikan kode berbahaya mengakses sumber daya, kode tersebut masih dapat membaca nilai bidang atau properti Anda yang mungkin berisi informasi sensitif.

Selain itu, jika kode Anda menerima input pengguna dari Internet atau sumber lain yang tidak dapat diandalkan, Anda harus berhati-hati tentang input berbahaya.

Pembungkus terkelola untuk implementasi kode pemrograman asli

Biasanya dalam skenario ini, beberapa fungsionalitas yang berguna diimplementasikan dalam kode asli yang ingin Anda sediakan untuk kode terkelola. Pembungkus yang dikelola mudah ditulis menggunakan platform invoke atau interoperabilitas COM. Namun, jika Anda melakukan ini, penelepon pembungkus Anda harus memiliki hak kode yang tidak dikelola agar berhasil. Di bawah kebijakan default, ini berarti bahwa kode yang diunduh dari intranet atau Internet tidak akan berfungsi dengan pembungkus.

Alih-alih memberikan hak kode yang tidak dikelola untuk semua aplikasi yang menggunakan pembungkus ini, lebih baik memberikan hak-hak ini hanya untuk kode pembungkus. Jika fungsionalitas yang mendasar tidak mengekspos sumber daya dan implementasinya juga aman, pembungkus hanya perlu menegaskan haknya, yang memungkinkan kode apa pun untuk memanggilnya. Ketika sumber daya digunakan, pengodean keamanan seharusnya sama seperti kasus kode pustaka yang dijelaskan di bagian berikutnya. Karena pembungkus berpotensi mengekspos penelepon ke sumber daya ini, verifikasi yang cermat tentang keamanan kode asli diperlukan dan merupakan tanggung jawab pembungkus.

Kode pustaka yang mengekspos sumber daya yang dilindungi

Pendekatan berikut adalah yang paling kuat dan karenanya berpotensi berbahaya (jika dilakukan dengan tidak benar) untuk pengodean keamanan: pustaka Anda berfungsi sebagai antarmuka untuk kode lain untuk mengakses sumber daya tertentu yang tidak tersedia, sama seperti kelas .NET memberlakukan izin untuk sumber daya yang mereka gunakan. Di mana pun Anda mengekspos sumber daya, kode Anda harus terlebih dahulu menuntut izin yang sesuai dengan sumber daya (yaitu, itu harus melakukan pemeriksaan keamanan) dan kemudian biasanya menegaskan hak-haknya untuk melakukan operasi aktual.

Lihat juga