Bagikan melalui


Pedoman pengodean yang aman

Sebagian besar kode aplikasi dapat dengan mudah 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 lainnya dalam kode Anda, Anda harus memasang penghalang untuk mencegah kode berbahaya mengakses informasi yang tidak Anda inginkan atau melakukan tindakan yang tidak diinginkan lainnya. Selain itu, Anda harus mencapai keseimbangan antara keamanan dan kegunaan di semua skenario yang diharapkan menggunakan kode tepercaya.

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

Mengamankan akses sumber daya

Saat merancang dan menulis kode, Anda perlu melindungi dan membatasi akses yang dimiliki kode ke sumber daya, terutama saat menggunakan atau menjalankan kode yang tidak diketahui asalnya. Jadi, ingatlah 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 pemformat biner.

Kode Keamanan Akses dan Kode Keamanan-Transparan tidak didukung sebagai batas keamanan dengan kode yang sebagian tepercaya. Kami menyarankan agar tidak memuat dan mengeksekusi kode yang tidak diketahui asalnya tanpa menerapkan langkah-langkah keamanan alternatif. Langkah-langkah keamanan alternatif adalah:

  • Virtualization

  • AppContainers

  • Pengguna dan izin sistem operasi (OS)

  • Kontainer Hyper-V

Kode keamanan netral

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

Pustaka keamanan-netral memiliki karakteristik khusus yang harus Anda pahami. Misalkan pustaka Anda menyediakan elemen API yang menggunakan file atau memanggil kode tak terkelola. Jika kode Anda tidak memiliki izin yang sesuai, kode tidak akan berjalan seperti yang dijelaskan. Tetapi, meskipun kode tersebut memiliki izin, kode aplikasi apa pun yang memanggilnya harus memiliki izin yang sama agar dapat berfungsi. Jika kode panggilan tidak memiliki izin yang tepat, SecurityException akan muncul sebagai akibat dari berjalannya tumpukan keamanan akses kode.

Kode aplikasi yang bukan merupakan komponen yang dapat digunakan kembali

Jika kode Anda adalah bagian dari aplikasi yang tidak akan dipanggil oleh kode lain, keamanannya sederhana dan pengodean khusus mungkin tidak diperlukan. Tetapi, 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 dengan input berbahaya.

Pembungkus terkelola ke implementasi kode asli

Biasanya dalam skenario ini, beberapa fungsionalitas yang berguna diterapkan dalam kode asli yang ingin Anda sediakan untuk kode terkelola. Pembungkus terkelola mudah ditulis menggunakan pemanggilan platform atau interop COM. Tetapi, jika Anda melakukan hal ini, pemanggil pembungkus harus memiliki hak kode tak terkelola agar berhasil. Di bawah kebijakan default, hal ini berarti bahwa kode yang diunduh dari intranet atau Internet tidak akan berfungsi dengan pembungkus.

Daripada memberikan hak kode tak terkelola ke semua aplikasi yang menggunakan pembungkus ini, lebih baik memberikan hak ini hanya untuk kode pembungkus. Jika fungsionalitas yang mendasari tidak memperlihatkan sumber daya dan penerapan juga aman, pembungkus hanya perlu menegaskan haknya, yang memungkinkan kode apa pun memanggil pembungkus. Ketika sumber daya terlibat, pengodean keamanan harus sama dengan kasus kode pustaka yang dijelaskan di bagian berikutnya. Karena pembungkus berpotensi mengekspos pemanggil ke sumber daya ini, verifikasi yang cermat terhadap keamanan kode asli diperlukan dan merupakan tanggung jawab pembungkus.

Kode pustaka yang mengekspos sumber daya yang dilindungi

Pendekatan berikut adalah yang paling kuat dan oleh karena itu berpotensi berbahaya (jika dilakukan dengan tidak benar) untuk pengodean keamanan: pustaka Anda berfungsi sebagai antarmuka untuk kode lain guna mengakses sumber daya tertentu yang tidak tersedia, seperti kelas .NET menerapkan izin untuk sumber daya yang digunakan. Di mana pun Anda mengekspos sumber daya, kode Anda harus terlebih dahulu meminta izin yang sesuai dengan sumber daya (yaitu, harus melakukan pemeriksaan keamanan) dan kemudian biasanya menegaskan haknya untuk melakukan operasi yang sebenarnya.

Lihat juga