Prasības: Es nesen izlasīju Microsoft ASP.NET Core dokumentu "Atvērtās novirzīšanas uzbrukumu novēršana ASP.NET Core", kas aptuveni nozīmēIzstrādātājiem ir jāpievērš uzmanība vietējās vietnes ceļam, pārejot uz atzvanīšanas adresi, lai daži lietotāji ļaunprātīgi viltotu atzvanīšanas adresi pikšķerēšanas uzbrukumiem。 Izpētiet kodu un sagatavojieties to pārnest uz ASP.NET MVC projektu.
Es atceros, ka lielākam ražotājam šī ievainojamība bija agrāk, un daži cilvēki to izmantoja, lai iztukšotu datplūsmu no QQ un WeChat, šādi:
Izmantojot ievainojamību, daži tērzēšanas rīki nespēja novērst lietotāju noklikšķināšanu uz saitēm, lai piekļūtu ļaunprātīgam vietnes saturam, jo viņi uzticējās lieliem uzņēmumu domēniem.
Kas ir atvērts novirzīšanas uzbrukums?
Tīmekļa lietojumprogrammas bieži novirza lietotājus uz pieteikšanās lapām, kad viņi piekļūst resursiem, kuriem nepieciešama autentifikācija. Novirzīšanā parasti ir iekļauts vaicājuma virknes parametrs returnUrl, lai lietotāji pēc veiksmīgas pieteikšanās varētu atgriezties sākotnēji pieprasītajā URL. Kad lietotājs ir autentificējies, viņš tiek novirzīts uz sākotnēji pieprasīto URL.
Uzbrukuma piemērs
Ļaunprātīgs lietotājs var izstrādāt uzbrukumu, kas paredzēts, lai ļaunprātīgam lietotājam piešķirtu piekļuvi lietotāja akreditācijas datiem vai sensitīvai informācijai. Lai sāktu uzbrukumu, ļaunprātīgs lietotājs maldina lietotāju, lai viņš noklikšķinātu uz saites uz jūsu vietnes galveno lapu, un šim URL pievienotu vaicājuma virknes vērtību returnUrl. laicontoso.comPiemēram, programma irhttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutSatur galveno lapu. Uzbrukums notiek šādi:
- Lietotājs noklikšķina uz ļaunprātīgas saites uzhttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(Otrais URL ir "contoso1.com", nevis "contoso.com”) 。
- Lietotājs veiksmīgi piesakās.
- Lietotājs tiek novirzīts uz vietnihttp://contoso1.com/Account/LogOn(Ļaunprātīga vietne, kas izskatās tieši tāda pati kā īstā).
- Lietotājs piesakās vēlreiz (sniedzot akreditācijas datus ļaunprātīgajai vietnei) un tiek novirzīts atpakaļ uz reālo vietni.
- Lietotāji var domāt, ka pirmais pieteikšanās mēģinājums neizdevās un otrais mēģinājums bija veiksmīgs.Iespējams, ka lietotāji joprojām nezina, ka viņu akreditācijas dati ir apdraudēti。
Papildus galvenajām lapām dažas vietnes piedāvā novirzīšanas lapas vai galapunktus. Pieņemsim, ka jūsu lietotnē ir lapa, kurā ir atvērta novirzīšana /Home/Redirect. Piemēram, uzbrucējs var izveidot punktu e-pasta ziņojumā[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginsaikne. Parastie lietotāji redzēs, ka URL sākas ar jūsu vietnes nosaukumu. Uzticības dēļ viņi noklikšķina uz saites. Atveriet novirzījumus, pēc tam nosūtiet lietotājus uz pikšķerēšanas vietnēm, kas izskatās tādas pašas kā jūsu, un lietotāji var pieteikties vietnēs, kuras viņi uzskata par jūsu.
Atklātu novirzīšanas uzbrukumu novēršana
Izstrādājot tīmekļa lietojumprogrammas, visi lietotāja sniegtie dati tiek uzskatīti par neuzticamiem. Ja jūsu lietotnē ir iespēja novirzīt lietotājus, pamatojoties uz URL saturu, pārliecinieties, ka šāda novirzīšana tiek veikta tikai lokāli jūsu lietotnē (vai novirzīt uz zināmiem URL, nevis uz vaicājuma virknē norādītajiem URL).
Vietējā novirzīšana
Kontrollera palīga metodes izmantošana LocalRedirect bāzes klasē:
Ja ir norādīts URL, kas nav lokāls, LocalRedirect rada izņēmumu. Pretējā gadījumā tā darbojas tāpat kā novirzīšanas metode. Izņēmuma informācija ir šāda:
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. Avota kods ir šāds:
Izpildes process: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl, un galu galā IsLocalUrl tiks aicināts spriest (UrlHelperFactory pēc noklusējuma ievieš IUrlHelperFactory interfeisu. )。
Avota koda adrese:Hipersaites pieteikšanās ir redzama.
IsLocalUrl
IsLocalUrl pirms novirzīšanas pārbaudiet URL, izmantojot šo metodi:
Kods ir šāds:
Testa kods ir šāds:
Ja jums ir atļauts pāriet uz citām domēna nosaukumu vietnēm, varat ieviest IUrlHelperFactory interfeisu un modificēt IServiceCollection, lai aizstātu noklusējuma ieviešanas klasi, startējot programmu.
Atsauce:Hipersaites pieteikšanās ir redzama.
(Beigas)
|