Administreerimisliidese viimine aadressile admin.example.com on tõeline paranemine: see hoiab admin-küpsised avalikest lehtedest eemal, annab kahele rakendusele eraldi vahemälud ja lubab suunata rangema võrgupoliitika ühele hostinimele. See ei ole aga CSRF-kontroll ega tee avaliku saidi koodi turvaliseks jätta seda sisseloginud administraatorile avatuks. Eraldamine muudab seda, mida brauser peab piiriks, mitte seda, mida server kontrollib, seega tehke need neli kontrolli enne, kui ütlete, et see on valmis.

Lugege originit ja saiti kahe erineva sõnana

Origin on skeem, host ja port, seega https://www.example.com ja https://admin.example.com on erinevad originid. Sait SameSite’i mõttes on skeem pluss registreeritav domeen, seega on need kaks hostinime tavaliselt sama sait. See erinevus on kogu lõks: SameSite’i atribuut ei aita teid õdede alamdomeenide vahel, sest brauser ei pea päringut üldse saidiüleseks. Suunake administreerimisliides tõeliselt teisele registreeritavale domeenile, näiteks admin-example.net, ja päring muutub tõesti saidiüleseks, ja just seal hakkab SameSite=Lax või Strict tegema tööd, millele saab lootma jääda.

Testige seda brauseris, mitte arutlege selle üle.

Laadige avalik sait, avage arendusriistad ja vaadake, milliseid küpsiseid brauser lisab administreerimishostile suunatud päringule. Kui küpsisel pole Domaini atribuuti, on see ainult hosti jaoks ja jääb oma hostinimele; kui see kannab Domain=example.com, rändab see iga õe juurde, ja uus alamdomeen ei andnud selle küpsise jaoks midagi.

Eraldage vastuse lugemine päringu saatmisest

Sama origin’i poliitika piirab vastuste lugemist originide vahel. See ei takista päringu saatmist ega vormi kandmast mandaate, mis brauseril juba on. Lihtne päring, vormi sisutüübiga või tavaline GET, toimetatakse kohale ilma eelkontrollita; CORS otsustab seejärel, kas kutsuv skript tohib vastust lugeda. CSRF elab täielikult saatmise poolel.

Seetõttu vajab server olekut muutvate toimingute jaoks selget kontrolli. Sessiooniga seotud sünkroniseerimistoken või serveris võrreldav topeltesituse küpsis katab juhtumi; Origin’i või Refereri võrdlemine tasub lisada teise väravana, kuid mitte ainsana, sest iga päring ei kanna päist ja iga puhverserver ei säilita seda. OWASPi CSRF-i ennetamise juhend käsitleb SameSite’i ühe kihina mitme seas just sel põhjusel.

Otsustage, mida võrguvärav tegelikult tõestab

VPN-i väljundite lubatud loend administreerimishosti ees on hea kontroll ja nõrk identiteediväide. See tõestab, et päring tuli aadressilt, mille VPN annab, mida võivad jagada kõik sellel väljundil, ja ei ütle midagi selle kohta, milline inimene või seade selle taga on. Käsitlege seda sisenemisfiltrina, mitte autentimisena.

Hoidke seda päringutasandi kontrollidest sõltumatuna. Kui loend on ainus asi ründaja ja olekut muutva lõpp-punkti vahel, eemaldab üks valesti seadistatud marsruut, üks split-tunnel klient või üks laenatud sülearvuti kontrolli täielikult.

Logige ka oodatud vahemikest väljapoole jäävaid keeldumisi. Nende purse on kõige kasulikum signaal, et keegi uurib piiri, mille te just ehitasite, ja vaikus on signaal, et filtrit ei jõuta üldse.

Hoidke küpsised, sisselogimine ja autoriseerimine selged

Küpsise ulatus otsustab suurema osa tulemusest. Vanem-domeeni küpsis saadetakse administreerimishostile, seega avaliku saidi skripti süst võib toimida administraatori sessiooniga; ainult hosti küpsis ei saa. Eelistage ainult hosti vormi, lisage Secure’i atribuut ja kasutage eesliidet __Host- seal, kus platvorm seda toetab, sest see eesliide nõuab Secure’i, Path=/ ja Domaini atribuudi puudumist. Lugege vastuse päist, mitte küpsisepurki: Set-Cookie: __Host-admin_session=...; Secure; Path=/; HttpOnly; SameSite=Lax, ilma Domaini atribuudita. Brauser viskab kõrvale __Host- küpsise, millel on Domain, seega õdede hostidel ikka nähtav küpsis on tõestus, et eesliidet ei rakendatud kunagi.

Seejärel hoidke autoriseerimine serveris, iga päringu kohta, igas administreerimise lõpp-punktis, mitte ainult sisselogimisel. Lubatud võrgust tulev päring peab ikka olema autenditud ja autoriseeritud toiminguks, mida ta palub; hostinimi ei ole tegija. Kui avalik ja administreerimisrakendus jagavad sisselogimisvoogu või sessioonihoidlat, kirjutage see suhe üles, sest see on lühim tee avaliku saidi veast administreerimistoiminguni.

Kontrollige piiri uuesti pärast eraldamist

Käivitage negatiivsed testid, mitte ainult õnnelik tee: ilma tokenita saidiülene vorm tuleb tagasi lükata, teise sessiooni token tuleb tagasi lükata ja ükski GET ei tohi olekut muuta. Kontrollige küpsiste atribuute arendusriistades, kinnitage, et Origin’i kontroll käivitub mittevastaval päringul, ja proovige administreerimishosti väljastpoolt VPN-i vahemikku, et näha filtrit töös.

Miski sellest ei kõrvalda XSS-viga administreerimisrakenduse sees. Eraldi hostinimi on brauseripoolne isolatsioonipiir, millel on tõeline väärtus, ja see ei asenda ebaturvalise koodi täitmise vältimist ega päringute kaitset serveri poolel. Pärast eraldamist on nimekiri lühem, kui paistab: eraldi origin, ainult hosti küpsised, token igal muudatusel, sisenemisfilter, mida te identiteedina ei usalda, ja iga päringu kohta otsustatud autoriseerimine.

Seotud artiklid