Cara Mengakses dan Mengamankan Logs Elmah.axd di ASP.NET

Elmah.axd (Error Logging Modules and Handlers) adalah endpoint HTTP bawaan dari pustaka open-source ELMAH di platform ASP.NET yang berfungsi menampilkan daftar seluruh error atau pengecualian (exceptions) aplikasi secara real-time melalui antarmuka web. Endpoint ini sangat krusial bagi pengembang untuk melakukan debugging tanpa harus membuka file log fisik di server, namun sekaligus menjadi celah keamanan berbahaya jika dibiarkan dapat diakses publik tanpa autentikasi.

Secara default, jika paket NuGet ELMAH telah terpasang dan dikonfigurasi pada file Web.config, log error dapat diakses langsung melalui URL root aplikasi yang diikuti dengan path /elmah.axd (contoh: https://namadomain.com/elmah.axd). Halaman ini menampilkan ringkasan waktu, status HTTP, jenis error, modul, dan alamat IP pengguna yang mengalami kendala.

Struktur Konfigurasi Elmah.axd di Web.config

Agar modul ELMAH dapat berjalan dan mengenali ekstensi .axd, konfigurasi pada file Web.config (untuk ASP.NET klasik/MVC) harus mencakup bagian <configSections>, <httpModules>, <httpHandlers>, dan <system.webServer>. Berikut adalah contoh blok konfigurasi standar yang benar:

<configuration>
  <configSections>
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
    </sectionGroup>
  </configSections>

  <elmah>
    <security allowRemoteAccess="false" />
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="DefaultConnection" />
  </elmah>

  <system.web>
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
    </httpModules>
    <httpHandlers>
      <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
    </httpHandlers>
  </system.web>

  <system.webServer>
    <modules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
    </modules>
    <handlers>
      <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
    </handlers>
  </system.webServer>
</configuration>

Matriks Risiko dan Pengamanan Elmah.axd

Membiarkan elmah.axd dapat diakses oleh siapa saja merupakan risiko keamanan tingkat tinggi (High Risk). Halaman log ini memuat informasi sensitif seperti string koneksi database, struktur direktori internal, parameter input pengguna, hingga versi pustaka yang digunakan yang dapat dimanfaatkan oleh pihak malili untuk melakukan eksploitasi.

Metode Pengamanan Tingkat Efektivitas Keterangan Teknis
Atribut allowRemoteAccess="false" Sedang Hanya mengizinkan akses lokal (localhost). Jika diakses dari internet akan memunculkan pesan error 403 Forbidden.
Pembatasan Role ASP.NET Membership Tinggi Mengatur otorisasi pada tag <location path="elmah.axd"> di Web.config agar hanya role Administrator yang dapat mengakses.
Custom Route / Ubah Path URL Menengah Menyembunyikan endpoint dari path standar agar tidak mudah ditemukan oleh pemindai otomatis (crawler/bot).

Cara Mengamankan Akses Elmah.axd

Untuk memastikan hanya pengguna berwenang yang dapat melihat log error pada lingkungan produksi (production), tambahkan blok lokasi autentikasi di dalam file Web.config seperti contoh di bawah ini:

<location path="elmah.axd">
  <system.web>
    <authorization>
      <allow roles="Administrator" />
      <deny users="*" />
    </authorization>
  </system.web>
</location>

Jika aplikasi Anda menggunakan ASP.NET Core, integrasi ELMAH umumnya digantikan oleh middleware logging bawaan seperti Serilog atau NLog. Namun, jika tetap menggunakan pustaka porting ELMAH untuk .NET Core, pengamanan dilakukan melalui konfigurasi RequireAuthorization pada endpoint routing.

Troubleshooting Masalah Umum Elmah.axd

Beberapa kendala yang sering ditemui pengembang saat mengonfigurasi ELMAH meliputi:

  • Error 404 Not Found: Terjadi karena handler elmah.axd belum didaftarkan dengan benar di bagian system.webServer/handlers (terutama pada IIS versi terbarukan dengan Integrated Pipeline Mode).
  • Error 403 Forbidden: Disebabkan oleh atribut allowRemoteAccess="false" sementara Anda mengaksesnya dari komputer klien jarak jauh. Ubah nilai menjadi true atau terapkan otorisasi berbasis role.
  • Log Tidak Tersimpan: Pastikan string koneksi database pada elemen errorLog sudah benar dan tabel yang dibutuhkan ELMAH telah dibuat melalui skrip migrasi SQL bawaan.