Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 5685|Jawab: 2

[Sumber] ASP.NET Inti (20) Mencegah serangan pengalihan terbuka

[Salin tautan]
Diposting pada 06/06/2023 21.55.38 | | | |
Persyaratan: Saya baru-baru ini membaca dokumen Microsoft ASP.NET Core "Mencegah Serangan Pengalihan Terbuka di ASP.NET Core", yang secara kasar berartiPengembang harus memperhatikan jalur situs lokal saat melompat ke alamat panggilan balik untuk mencegah beberapa orang memalsukan alamat panggilan balik untuk serangan phishing secara jahat。 Pelajari kode dan bersiaplah untuk memindahkannya ke proyek MVC ASP.NET.

Saya ingat bahwa produsen besar memiliki kerentanan ini sebelumnya, dan beberapa orang menggunakannya untuk menguras lalu lintas dari QQ dan WeChat, sebagai berikut:



Mengeksploitasi kerentanan tersebut, beberapa alat obrolan tidak dapat mencegah pengguna mengklik tautan untuk mengakses konten situs web berbahaya karena kepercayaan mereka pada domain perusahaan besar.

Apa itu serangan pengalihan terbuka?

Aplikasi web sering mengarahkan pengguna ke halaman login saat mereka mengakses sumber daya yang memerlukan autentikasi. Pengalihan biasanya menyertakan parameter querystring returnUrl sehingga pengguna dapat kembali ke URL yang diminta semula setelah login berhasil. Setelah pengguna mengautentikasi, mereka akan dialihkan ke URL yang mereka minta semula.

Contoh serangan

Pengguna jahat dapat mengembangkan serangan yang dirancang untuk memberi pengguna jahat akses ke kredensial atau informasi sensitif pengguna. Untuk memulai serangan, pengguna jahat akan mengelabui pengguna agar mengklik link ke halaman landing situs Anda dan menambahkan nilai querystring returnUrl ke URL tersebut. untukcontoso.comMisalnya, aplikasi ada dihttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutBerisi halaman arahan. Serangan mengikuti langkah-langkah berikut:

  • Pengguna mengklik tautan berbahaya kehttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(URL kedua adalah "contoso1.com", alih-alih "contoso.com”) 。
  • Pengguna berhasil masuk.
  • Pengguna diarahkan ke situshttp://contoso1.com/Account/LogOn(Situs berbahaya yang terlihat persis seperti yang asli).
  • Pengguna masuk lagi (memberikan kredensial ke situs berbahaya) dan diarahkan kembali ke situs asli.
  • Pengguna mungkin berpikir bahwa upaya login pertama mereka gagal dan upaya kedua berhasil.Kemungkinan pengguna masih belum tahu bahwa kredensial mereka telah disusupi




Selain halaman arahan, beberapa situs menawarkan halaman pengalihan atau titik akhir. Katakanlah aplikasi Anda memiliki halaman yang menyertakan pengalihan terbuka, /Home/Redirect. Misalnya, penyerang dapat membuat titik dalam email[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Logintautan. Pengguna biasa akan melihat bahwa URL dimulai dengan nama situs Anda. Karena kepercayaan, mereka mengklik tautan. Buka pengalihan lalu arahkan pengguna ke situs phishing yang terlihat sama dengan milik Anda, dan pengguna dapat masuk ke situs yang menurut mereka adalah milik Anda.

Mencegah serangan pengalihan terbuka

Saat mengembangkan aplikasi web, semua data yang disediakan pengguna diperlakukan sebagai tidak dapat dipercaya. Jika aplikasi Anda memiliki kemampuan untuk mengalihkan pengguna berdasarkan konten URL, pastikan pengalihan tersebut hanya dilakukan secara lokal di aplikasi Anda (atau pengalihan ke URL yang diketahui, bukan URL apa pun yang mungkin disediakan dalam querystring).

Pengalihan Lokal

Menggunakan metode pembantu Controller di kelas dasar LocalRedirect:

Jika URL non-lokal ditentukan, LocalRedirect akan melemparkan pengecualian. Jika tidak, itu berperilaku sama dengan metode Pengalihan. Informasi pengecualian adalah sebagai berikut:

InvalidOperationException: The supplied URL is not local. A URL with an absolute path is considered local if it does not have a host/authority part. URLs using virtual paths ('~/') are also local.
Kode sumbernya adalah sebagai berikut:



Proses eksekusi: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl, dan pada akhirnya, IsLocalUrl akan dipanggil untuk menilai (UrlHelperFactory mengimplementasikan antarmuka IUrlHelperFactory secara default. )。

Alamat kode sumber:Login hyperlink terlihat.

IsLocalUrl

IsLocalUrl sebelum mengalihkan, uji URL menggunakan metode ini:

Kodenya adalah sebagai berikut:

Kode pengujiannya adalah sebagai berikut:



Jika Anda diizinkan untuk melompat ke situs nama domain lain, Anda dapat mengimplementasikan antarmuka IUrlHelperFactory dan memodifikasi IServiceCollection untuk menggantikan kelas implementasi default saat program dimulai.

Referensi:Login hyperlink terlihat.

(Akhir)





Mantan:Docker membangun gambar di atas sistem Windows
Depan:[Turn] (MSSQL) database SQL Server int dan guid untuk perbandingan kunci primer
 Tuan tanah| Diposting pada 06/06/2023 21.57.12 |
ASP.NET Core (sembilan belas) menggunakan BackgroundService untuk menjalankan tugas latar belakang
https://www.itsvse.com/thread-10591-1-1.html

ASP.NET Inti (18) Menyesuaikan cache output OutputCache sederhana
https://www.itsvse.com/thread-10583-1-1.html

ASP.NET Core (17) mengintegrasikan analisis kinerja aplikasi MiniProfile
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET Inti (16) Bergantung pada injeksi layanan pendaftaran dinamis
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core (XV) menggunakan HttpClient untuk mengirim permintaan HTTP
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core (empat belas) didasarkan pada captcha gambar SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) untuk menentukan apakah itu permintaan Ajax atau tidak
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Inti (dua belas) front-end JS, bundling CSS, dan kompresi
https://www.itsvse.com/thread-10282-1-1.html

Rute titik akhir ASP.NET Core (XI) menambahkan middleware untuk menampilkan semua layanan DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Penjelasan terperinci tentang prioritas Konfigurasi di Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Penjelasan terperinci tentang middleware Middleware dari Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET lubang parameter default UI Swagger di Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Inti (7) Analisis mendalam dari kode sumber kerangka kerja
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI secara manual memperoleh metode penyuntikan objek
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (lima) didasarkan pada transaksi distribusi CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) memfilter validasi model ModelState terpadu
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Inti (iii) Membuat instans secara dinamis menggunakan ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Inti (2) Mulai ulang aplikasi dengan kode
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) menggunakan caching Redis
https://www.itsvse.com/thread-9393-1-1.html
 Tuan tanah| Diposting pada 06/06/2023 22.01.21 |
Metode IsLocalUrl dipindahkan ke kerangka kerja .NET sebagai berikut:

Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com