Kako uporabljati #[Requires]
Atribut
Pri pisanju spletne aplikacije se pogosto srečate s potrebo po omejitvi dostopa do določenih delov aplikacije.
Morda želite, da lahko nekatere zahteve pošljejo podatke samo prek obrazca (torej z uporabo metode POST) ali da so dostopne
samo za klice AJAX. V okolju Nette Framework 3.2 je bilo uvedeno novo orodje, ki vam omogoča elegantno in jasno določanje
takšnih omejitev: orodje #[Requires]
atribut.
Atribut je posebna oznaka v jeziku PHP, ki jo dodate pred definicijo razreda ali metode. Ker gre v bistvu za razred, morate za delovanje naslednjih primerov vključiti klavzulo use:
Uporabite lahko #[Requires]
atribut v samem razredu presenter in v teh metodah:
action<Action>()
render<View>()
handle<Signal>()
createComponent<Name>()
Tudi zadnji dve metodi se nanašata na komponente, zato lahko atribut uporabite tudi z njima.
Če pogoji, določeni z atributom, niso izpolnjeni, se sproži napaka HTTP 4xx.
Metode HTTP
Določite lahko, katere metode HTTP (kot so GET, POST itd.) so dovoljene za dostop. Če želite na primer dovoliti dostop samo z oddajo obrazca, nastavite:
Zakaj za spreminjanje stanja uporabiti POST namesto GET in kako to storiti? Preberite vodnik.
Določite lahko metodo ali niz metod. Poseben primer je vrednost '*'
za omogočanje vseh metod, ki jih
predstavniki zaradi varnostnih razlogov privzeto
ne omogočajo.
Klici AJAX
Če želite, da je predstavnik ali metoda dostopna samo za zahteve AJAX, uporabite:
Enako poreklo
Če želite povečati varnost, lahko zahtevate, da je zahteva poslana iz iste domene. S tem preprečite ranljivost CSRF:
Za handle<Signal>()
je samodejno potreben dostop iz iste domene. Če torej želite dovoliti dostop iz katere
koli domene, določite:
Dostop prek spletne strani Forward
Včasih je koristno omejiti dostop do predstavnika, tako da je na voljo le posredno, na primer z uporabo metod
forward()
ali switch()
iz drugega predstavnika. Tako so predstavniki napak zaščiteni, da jih ni
mogoče sprožiti z naslova URL:
V praksi je pogosto treba označiti določene poglede, do katerih je mogoče dostopati le na podlagi logike v predstavitvenem programu. Spet tako, da jih ni mogoče odpreti neposredno:
Posebni ukrepi
Prav tako lahko omejite, da bo določena koda, na primer ustvarjanje komponente, dostopna samo za določena dejanja v predstavitvenem programu:
Za posamezno dejanje ni treba pisati polja: #[Requires(actions: 'default')]
Atributi po meri
Če želite uporabiti #[Requires]
atribut večkrat uporabiti z enakimi nastavitvami, lahko ustvarite svoj
atribut, ki bo podedoval #[Requires]
in ga nastavite v skladu s svojimi potrebami.
Na primer, #[SingleAction]
omogoča dostop samo prek dejanja default
:
Ali #[RestMethods]
omogoči dostop prek vseh metod HTTP, ki se uporabljajo za API REST:
Zaključek
Na spletni strani #[Requires]
vam omogoča veliko prilagodljivost in nadzor nad načinom dostopa do spletnih
strani. Z uporabo preprostih, a zmogljivih pravil lahko izboljšate varnost in pravilno delovanje svoje aplikacije. Kot lahko
vidite, lahko z uporabo atributov v Nette ne le poenostavite svoje delo, temveč ga tudi zavarujete.