Bingkai Keamanan: Manajemen Pengecualian | Mitigasi
Produk/Layanan | Artikel |
---|---|
WCF | |
API Web | |
Aplikasi Web |
WCF- Jangan sertakan simpul serviceDebug dalam file konfigurasi
Judul | Detail |
---|---|
Komponen | WCF |
Fase SDL | Build |
Teknologi yang Berlaku | Generik, NET Framework 3 |
Atribut | T/A |
Referensi | MSDN, Fortify Kingdom |
Langkah-langkah | Layanan Windows Communication Framework (WCF) dapat dikonfigurasi untuk membongkar informasi penelusuran kesalahan. Informasi debug tidak boleh digunakan di lingkungan produksi. Tag <serviceDebug> menentukan apakah fitur informasi debug diaktifkan untuk layanan WCF. Jika atribut includeExceptionDetailInFaults diatur ke true, informasi pengecualian dari aplikasi akan dikembalikan ke klien. Penyerang dapat memanfaatkan informasi tambahan yang mereka peroleh dari output penelusuran kesalahan untuk memasang serangan yang ditargetkan pada kerangka kerja, database, atau sumber daya lain yang digunakan oleh aplikasi. |
Contoh
File konfigurasi berikut mencakup tag <serviceDebug>
:
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name=""MyServiceBehavior"">
<serviceDebug includeExceptionDetailInFaults=""True"" httpHelpPageEnabled=""True""/>
...
Nonaktifkan informasi penelusuran kesalahan di dalam layanan. Ini dapat dicapai dengan menghapus tag <serviceDebug>
dari file konfigurasi aplikasi Anda.
WCF- Jangan sertakan simpul serviceMetadata dalam file konfigurasi
Judul | Detail |
---|---|
Komponen | WCF |
Fase SDL | Build |
Teknologi yang Berlaku | Generik |
Atribut | Generik, Kerangka Kerja NET 3 |
Referensi | MSDN, Fortify Kingdom |
Langkah-langkah | Mengekspos informasi tentang layanan secara publik dapat memberi penyerang wawasan berharga tentang bagaimana mereka dapat mengeksploitasi layanan. Tag <serviceMetadata> mengaktifkan fitur penerbitan metadata. Metadata layanan dapat berisi informasi sensitif yang seharusnya tidak dapat diakses oleh publik. Minimal, hanya mengizinkan pengguna tepercaya untuk mengakses metadata dan memastikan bahwa informasi yang tidak perlu tidak terekspos. Lebih baik lagi, sepenuhnya menonaktifkan kemampuan untuk memublikasikan metadata. Konfigurasi WCF yang aman tidak akan berisi tag <serviceMetadata> . |
Pastikan penanganan pengecualian yang tepat dilakukan di API Web ASP.NET
Judul | Detail |
---|---|
Komponen | API Web |
Fase SDL | Build |
Teknologi yang Berlaku | MVC 5, MVC 6 |
Atribut | T/A |
Referensi | Penanganan Pengecualian di API Web ASP.NET, Validasi Model di API Web ASP.NET |
Langkah-langkah | Secara default, sebagian besar pengecualian yang tidak tertangkap di API Web ASP.NET diterjemahkan ke dalam respons HTTP dengan kode status 500, Internal Server Error |
Contoh
Untuk mengontrol kode status yang dikembalikan oleh API, HttpResponseException
dapat digunakan seperti yang ditunjukkan di bawah ini:
public Product GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return item;
}
Contoh
Untuk kontrol lebih lanjut pada respons pengecualian, kelas HttpResponseMessage
dapat digunakan seperti yang ditunjukkan di bawah ini:
public Product GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
var resp = new HttpResponseMessage(HttpStatusCode.NotFound)
{
Content = new StringContent(string.Format("No product with ID = {0}", id)),
ReasonPhrase = "Product ID Not Found"
}
throw new HttpResponseException(resp);
}
return item;
}
Untuk menangkap pengecualian tidak tertangani yang bukan dari jenis HttpResponseException
, Filter Pengecualian dapat digunakan. Filter pengecualian mengimplementasikan antarmuka System.Web.Http.Filters.IExceptionFilter
. Cara paling sederhana untuk menulis filter pengecualian adalah dengan menurunkan dari kelas System.Web.Http.Filters.ExceptionFilterAttribute
dan menimpa metode OnException.
Contoh
Berikut adalah filter yang mengonversi pengecualian NotImplementedException
menjadi kode status HTTP 501, Not Implemented
:
namespace ProductStore.Filters
{
using System;
using System.Net;
using System.Net.Http;
using System.Web.Http.Filters;
public class NotImplExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
if (context.Exception is NotImplementedException)
{
context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
}
}
}
Ada beberapa cara untuk mendaftarkan filter pengecualian API Web:
- Menurut tindakan
- Menurut pengontrol
- Secara global
Contoh
Untuk menerapkan filter ke tindakan tertentu, tambahkan filter sebagai atribut ke tindakan:
public class ProductsController : ApiController
{
[NotImplExceptionFilter]
public Contact GetContact(int id)
{
throw new NotImplementedException("This method is not implemented");
}
}
Contoh
Untuk menerapkan filter ke semua tindakan pada controller
, tambahkan filter sebagai atribut ke kelas controller
:
[NotImplExceptionFilter]
public class ProductsController : ApiController
{
// ...
}
Contoh
Untuk menerapkan filter secara global ke semua pengontrol API Web, tambahkan instans filter ke koleksi GlobalConfiguration.Configuration.Filters
. Filter pengecualian dalam koleksi ini berlaku untuk setiap tindakan pengontrol API Web.
GlobalConfiguration.Configuration.Filters.Add(
new ProductStore.NotImplExceptionFilterAttribute());
Contoh
Untuk validasi model, status model dapat diteruskan ke metode CreateErrorResponse seperti yang ditunjukkan di bawah ini:
public HttpResponseMessage PostProduct(Product item)
{
if (!ModelState.IsValid)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
// Implementation not shown...
}
Periksa tautan di bagian referensi untuk detail tambahan tentang penanganan luar biasa dan validasi model di API Web ASP.NET
Jangan mengekspos detail keamanan dalam pesan kesalahan
Judul | Detail |
---|---|
Komponen | Aplikasi Web |
Fase SDL | Build |
Teknologi yang Berlaku | Generik |
Atribut | T/A |
Referensi | T/A |
Langkah-langkah | Pesan kesalahan umum diberikan langsung kepada pengguna tanpa menyertakan data aplikasi sensitif. Contoh data sensitif meliputi:
Menjebak semua kesalahan dalam aplikasi dan menyediakan pesan kesalahan umum, serta mengaktifkan kesalahan kustom dalam IIS akan membantu mencegah pengungkapan informasi. Database SQL Server dan penanganan Pengecualian .NET, di antara arsitektur penanganan kesalahan lainnya, sangat bertele-tele dan sangat berguna bagi pengguna jahat yang membuat profil aplikasi Anda. Jangan langsung menampilkan konten kelas yang diturunkan dari kelas Pengecualian .NET, dan pastikan bahwa Anda memiliki penanganan pengecualian yang tepat sehingga pengecualian yang tidak diharapkan tidak dimunculkan langsung ke pengguna secara tidak sengaja.
|
Halaman penanganan kesalahan Terapkan Default
Judul | Detail |
---|---|
Komponen | Aplikasi Web |
Fase SDL | Build |
Teknologi yang Berlaku | Generik |
Atribut | T/A |
Referensi | Edit Kotak Dialog Pengaturan Halaman Kesalahan ASP.NET |
Langkah-langkah | Ketika aplikasi ASP.NET gagal dan menyebabkan Kesalahan Server Internal HTTP/1.x 500, atau konfigurasi fitur (seperti Pemfilteran Permintaan) mencegah halaman ditampilkan, pesan kesalahan akan dihasilkan. Administrator dapat memilih apakah aplikasi harus menampilkan pesan yang ramah kepada klien, pesan kesalahan terperinci kepada klien, atau pesan kesalahan terperinci ke localhost saja. Tag
Buka file |
Atur Metode Penyebaran ke Ritel di IIS
Judul | Detail |
---|---|
Komponen | Aplikasi Web |
Fase SDL | Penyebaran |
Teknologi yang Berlaku | Generik |
Atribut | T/A |
Referensi | Elemen penyebaran (Skema Pengaturan ASP.NET) |
Langkah-langkah | Pengalih Seringkali waktu, pengalih dan opsi yang berfokus pada pengembang, seperti pelacakan permintaan dan penelusuran kesalahan yang gagal, diaktifkan selama pengembangan aktif. Disarankan agar metode penyebaran pada server produksi apa pun diatur ke ritel. buka file machine.config dan pastikan bahwa |
Pengecualian harus gagal dengan aman
Judul | Detail |
---|---|
Komponen | Aplikasi Web |
Fase SDL | Build |
Teknologi yang Berlaku | Generik |
Atribut | T/A |
Referensi | Gagal dengan aman |
Langkah-langkah | Aplikasi harus gagal dengan aman. Metode apa pun yang mengembalikan nilai Boolean, berdasarkan keputusan tertentu yang dibuat, harus memiliki blok pengecualian yang dibuat dengan hati-hati. Ada banyak kesalahan logis karena masalah keamanan merayap, ketika blok pengecualian ditulis sembarangan. |
Contoh
public static bool ValidateDomain(string pathToValidate, Uri currentUrl)
{
try
{
if (!string.IsNullOrWhiteSpace(pathToValidate))
{
var domain = RetrieveDomain(currentUrl);
var replyPath = new Uri(pathToValidate);
var replyDomain = RetrieveDomain(replyPath);
if (string.Compare(domain, replyDomain, StringComparison.OrdinalIgnoreCase) != 0)
{
//// Adding additional check to enable CMS urls if they are not hosted on same domain.
if (!string.IsNullOrWhiteSpace(Utilities.CmsBase))
{
var cmsDomain = RetrieveDomain(new Uri(Utilities.Base.Trim()));
if (string.Compare(cmDomain, replyDomain, StringComparison.OrdinalIgnoreCase) != 0)
{
return false;
}
else
{
return true;
}
}
return false;
}
}
return true;
}
catch (UriFormatException ex)
{
LogHelper.LogException("Utilities:ValidateDomain", ex);
return true;
}
}
Metode di atas akan selalu mengembalikan True, jika beberapa pengecualian terjadi. JJika pengguna akhir memberikan URL yang salah format, yang dipatuhi oleh browser, tetapi tidak konstruktor Uri()
, ini akan melemparkan pengecualian, dan korban akan dibawa ke URL yang valid tetapi salah format.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk