GNU/Linux >> Belajar Linux >  >> Linux

Menambahkan Header Keamanan dengan mudah ke aplikasi web ASP.NET Core Anda dan mendapatkan nilai A

Yah itu menyebalkan.

Itu situs podcast saya dengan rating F dari SecurityHeaders.com. Apa kesepakatannya? Saya mengurus ini bulan lalu!

Ternyata, baru-baru ini saya pindah dari Windows ke Linux di Azure.

Jika saya menggunakan IIS di Windows, saya dapat (dan memang) membuat bagian di web.config saya yang terlihat seperti ini.

Perhatikan bahwa saya telah menambahkan beberapa hal khusus dan Anda ingin memastikan Anda TIDAK hanya menyalin tempel ini. Jadikan milikmu, milikmu.

Perhatikan bahwa saya telah memasukkan banyak domain ke daftar putih untuk memastikan situs saya berfungsi. Perhatikan juga bahwa saya memiliki sejumlah "inline tidak aman" yang bukan ide.

<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000"/>
<add name="X-Content-Type-Options" value="nosniff"/>
<add name="X-Xss-Protection" value="1; mode=block"/>
<add name="X-Frame-Options" value="SAMEORIGIN"/>
<add name="Content-Security-Policy" value="default-src https:; img-src * 'self' data: https:; style-src 'self' 'unsafe-inline' www.google.com platform.twitter.com cdn.syndication.twimg.com fonts.googleapis.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' www.google.com cse.google.com cdn.syndication.twimg.com platform.twitter.com platform.instagram.com www.instagram.com cdn1.developermedia.com cdn2.developermedia.com apis.google.com www.googletagservices.com adservice.google.com securepubads.g.doubleclick.net ajax.aspnetcdn.com ssl.google-analytics.com az416426.vo.msecnd.net/;"/>
<add name="Referrer-Policy" value="no-referrer-when-downgrade"/>
<add name="Feature-Policy" value="geolocation 'none';midi 'none';notifications 'none';push 'none';sync-xhr 'none';microphone 'none';camera 'none';magnetometer 'none';gyroscope 'none';speaker 'self';vibrate 'none';fullscreen 'self';payment 'none';"/>
<remove name="X-Powered-By" />
<remove name="X-AspNet-Version" />
<remove name="Server" />
</customHeaders>
</httpProtocol>
...

Tetapi, jika saya TIDAK menggunakan IIS - artinya saya menjalankan aplikasi ASP.NET saya dalam wadah atau di Linux - ini akan diabaikan. Karena saya baru saja pindah ke Linux, saya berasumsi (buruk karena tidak ada tes di sini) bahwa itu hanya akan berfungsi.

Situs saya dihosting di Azure App Service untuk Linux, jadi saya ingin header ini di-output dengan cara yang sama. Ada beberapa pilihan bagus dalam bentuk perpustakaan Open Source NuGet untuk membantu. Jika saya menggunakan pipa middleware ASP.NET Core maka header ini akan menjadi output dan bekerja SAMA pada Windows DAN Linux.

Saya akan menggunakan Perpustakaan Keamanan NWebsec untuk ASP.NET Core. Mereka menawarkan cara lancar sederhana untuk menambahkan header yang saya inginkan.

HARUS JELAS: Ya saya, atau Anda, dapat menambahkan header ini secara manual dengan AddHeader tetapi pustaka sederhana ini memastikan bahwa koma dan titik koma kami benar. Mereka juga menawarkan middleware yang diketik dengan kuat yang cepat dan mudah digunakan.

Mengambil web.config yang sama di atas dan menerjemahkannya ke Configure Pipeline Startup.cs dengan NWebSec terlihat seperti ini:

app.UseHsts(options => options.MaxAge(days: 30));
app.UseXContentTypeOptions();
app.UseXXssProtection(options => options.EnabledWithBlockMode());
app.UseXfo(options => options.SameOrigin());
app.UseReferrerPolicy(opts => opts.NoReferrerWhenDowngrade());

app.UseCsp(options => options
.DefaultSources(s => s.Self()
.CustomSources("data:")
.CustomSources("https:"))
.StyleSources(s => s.Self()
.CustomSources("www.google.com","platform.twitter.com","cdn.syndication.twimg.com","fonts.googleapis.com")
.UnsafeInline()
)
.ScriptSources(s => s.Self()
.CustomSources("www.google.com","cse.google.com","cdn.syndication.twimg.com","platform.twitter.com" ... )
.UnsafeInline()
.UnsafeEval()
)
);

Ada satu header HTTP eksperimental yang (belum) didukung oleh NWebSec yang disebut Feature-Policy. Ini adalah cara situs web Anda dapat mendeklarasikan di sisi server "situs saya tidak mengizinkan penggunaan webcam." Itu akan mencegah orang jahat menyuntikkan skrip lokal yang menggunakan webcam, atau fitur sisi klien lainnya.

Saya akan melakukannya secara manual baik untuk memastikan bahwa saya bisa, tetapi juga bahwa Anda tidak dibatasi oleh perpustakaan keamanan pilihan Anda.

CATATAN: Pustaka keamanan hebat lainnya adalah NetEscapades milik Andrew Lock yang menyertakan Kebijakan-Fitur serta beberapa fitur hebat lainnya.

Inilah Middleware tunggal saya yang baru saja menambahkan tajuk Kebijakan-Fitur ke semua tanggapan.

//Feature-Policy
app.Use(async (context, next) =>
{
context.Response.Headers.Add("Feature-Policy", "geolocation 'none';midi 'none';notifications 'none';push 'none';sync-xhr 'none';microphone 'none';camera 'none';magnetometer 'none';gyroscope 'none';speaker 'self';vibrate 'none';fullscreen 'self';payment 'none';");
await next.Invoke();
});

Sekarang saya akan melakukan, membangun, dan menyebarkan (semua otomatis untuk saya menggunakan Azure DevOps) dan memindai situs lagi:

Itu cukup mudah dan memakan waktu kurang dari satu jam. Jarak tempuh Anda mungkin berbeda, tetapi itulah gambaran umumnya!

Sponsor :Lindungi aplikasi Anda dari rekayasa balik dan gangguan dengan PreEmptive, pembuat Dotfuscator. Dotfuscator telah ada di dalam kotak dengan Microsoft Visual Studio sejak 2003. Sebutkan HANSELMAN untuk menghemat lisensi profesional!


Linux
  1. Cerminkan Situs Web Anda Dengan rsync

  2. Menambahkan argumen dan opsi ke skrip Bash Anda

  3. Menjalankan aplikasi ASP.NET Core mandiri di Ubuntu

  1. Tips dan Trik untuk Mengamankan Server Web Nginx Anda

  2. Pencari Font – Mudah Mencari Dan Menginstal Google Web Font di Linux

  3. WallpaperDownloader – Unduh, Kelola, dan Ubah Wallpaper Desktop Anda dengan Mudah

  1. Cara menginstal Firefox Quantum dan mempercepat penjelajahan web Anda

  2. Mengamankan Server Web Apache Anda dengan Keamanan Mod

  3. Temukan CyberPanel dan Instal untuk Mengontrol Host Web Anda