Mae symud y rhyngwyneb gweinyddol i admin.example.com yn welliant gwirioneddol: mae’n cadw cwcis gweinyddol oddi wrth dudalennau cyhoeddus, yn rhoi storfa wahân i’r ddwy ap, ac yn gadael i chi gyfeirio polisi rhwydwaith llymach at un enw gwesteiwr. Nid yw’n rheolaeth CSRF, ac nid yw’n gwneud cod y safle cyhoeddus yn ddiogel i’w adael ar agor o flaen gweinyddwr sydd wedi mewngofnodi. Mae’r gwahanu yn newid yr hyn y mae’r porwr yn ei ystyried yn ffin, nid yr hyn y mae’r gweinydd yn ei wirio, felly gwnewch y pedwar gwiriad hyn cyn dweud ei fod wedi’i orffen.

Darllenwch darddiad a safle fel dau air gwahanol

Darddiad yw cynllun, gwesteiwr a phorth, felly mae https://www.example.com a https://admin.example.com yn ddau ddarddiad gwahanol. Safle, yn ystyr SameSite, yw cynllun ynghyd â’r parth cofrestradwy, felly mae’r ddau enw gwesteiwr hynny fel arfer yr un safle. Y gwahaniaeth hwnnw yw’r trap i gyd: ni fydd priodwedd SameSite yn eich helpu ar draws is-barthau chwaer, oherwydd nid yw’r porwr yn ystyried y cais yn un traws-safle o gwbl. Cyfeiriwch y rhyngwyneb gweinyddol at barth cofrestradwy gwirioneddol wahanol, fel admin-example.net, ac mae’r cais yn dod yn draws-safle, a dyna lle mae SameSite=Lax neu Strict yn dechrau gwneud gwaith y gallwch ymddiried ynddo.

Profwch hyn yn y porwr yn hytrach na rhesymu amdano.

Llwythwch y safle cyhoeddus, agorwch offer datblygwyr, a gweld pa gwcis y mae’r porwr yn eu cysylltu â chais at y gwesteiwr gweinyddol. Os nad oes priodwedd Domain gan y cwci, mae’n un gwesteiwr yn unig ac yn aros ar ei enw ei hun; os yw’n cario Domain=example.com, mae’n teithio at bob chwaer, ac nid yw’r is-barth newydd wedi rhoi unrhyw beth i chi ar gyfer y cwci hwnnw.

Gwahanwch allu darllen yr ymateb oddi wrth allu anfon y cais

Mae’r polisi un tarddiad yn cyfyngu ar ddarllen ymatebion ar draws tarddiadau. Nid yw’n atal cais rhag cael ei anfon, ac nid yw’n atal ffurflen rhag cario manylion mewngofnodi sydd eisoes gan y porwr. Mae cais syml, un â math cynnwys ffurflen neu GET plaen, yn cael ei ddosbarthu heb wirio ymlaen llaw; wedyn mae CORS yn penderfynu a gaiff y sgript sy’n galw ddarllen yr ateb. Mae CSRF yn byw yn gyfan gwbl ar ochr anfon.

Dyna pam mae angen gwirio clir ar y gweinydd ar gyfer gweithrediadau sy’n newid cyflwr. Mae tocyn cydamseru wedi’i glymu wrth y sesiwn, neu gwci dauanfoniad a gymharir ar y gweinydd, yn gorchuddio’r achos; mae cymharu Origin neu Referer yn werth ei ychwanegu fel ail giât ond nid fel yr unig un, oherwydd nid yw pob cais yn cario’r pennawd ac nid yw pob dirprwy yn ei gadw. Mae canllaw OWASP ar atal CSRF yn trin SameSite fel un haen ymhlith sawl un am yr union reswm hwn.

Penderfynwch beth mae’r giât rwydwaith yn ei brofi mewn gwirionedd

Mae rhestr caniatáu allanfeydd VPN o flaen y gwesteiwr gweinyddol yn rheolaeth dda ac yn honiad hunaniaeth wan. Mae’n profi bod y cais wedi dod o gyfeiriad y mae’r VPN yn ei roi, y gall pawb ar yr allanfa honno ei rannu, ac nid yw’n dweud dim am bwy na pha ddyfais sydd y tu ôl iddo. Triniwch ef fel hidlydd mynediad, nid fel dilysiad.

Cadwch ef yn annibynnol o’r gwiriadau ar lefel y cais. Os mai’r rhestr yw’r unig beth rhwng ymosodwr a man diwedd sy’n newid cyflwr, mae un llwybr wedi’i ffurfweddu’n wael, un cleient split-tunnel neu un gliniadur benthyg yn tynnu’r rheolaeth yn gyfan gwbl.

Cofnodwch wrthodiadau o’r tu allan i’r ystodau disgwyliedig hefyd. Eu ffrwydrad yw’r signal mwyaf defnyddiol bod rhywun yn archwilio’r ffin rydych newydd ei hadeiladu, a’r distawrwydd yw’r signal nad yw’r hidlydd yn cael ei gyrraedd o gwbl.

Cadwch gwcis, mewngofnodi ac awdurdodiad yn glir

Mae cwmpas y cwci yn penderfynu’r rhan fwyaf o’r canlyniad. Anfonir cwci parth rhiant at y gwesteiwr gweinyddol, felly gall chwistrelliad sgript ar y safle cyhoeddus weithredu gyda sesiwn gweinyddwr; ni all cwci un gwesteiwr. Dewiswch y ffurf un gwesteiwr, ychwanegwch y briodwedd Secure, a defnyddiwch y rhagddodiad __Host- lle mae’r llwyfan yn ei gefnogi, oherwydd mae’r rhagddodiad hwnnw’n gofyn am Secure, Path=/ a dim priodwedd Domain. Darllenwch bennawd yr ymateb yn hytrach na’r jwg cwcis: Set-Cookie: __Host-admin_session=...; Secure; Path=/; HttpOnly; SameSite=Lax, heb briodwedd Domain. Mae’r porwr yn taflu cwci __Host- sy’n cario Domain, felly mae cwci sy’n dal i ymddangos ar westeiwyr chwaer yn brawf na chafodd y rhagddodiad ei gymhwyso erioed.

Yna cadwch awdurdodiad ar y gweinydd, fesul cais, ar bob man diwedd gweinyddol, nid yn unig wrth fewngofnodi. Mae cais sy’n dod o rwydwaith a ganiateir yn dal i fod angen ei ddilysu a’i awdurdodi ar gyfer y gweithrediad y mae’n gofyn amdano; nid yw enw gwesteiwr yn actor. Os yw’r apiau cyhoeddus a gweinyddol yn rhannu llif mewngofnodi neu storfa sesiynau, ysgrifennwch y berthynas honno, oherwydd dyna’r llwybr byrraf o wall ar y safle cyhoeddus i weithred weinyddol.

Ail-wiriwch y ffin ar ôl y gwahanu

Rhedwch y profion negyddol, nid y llwybr hapus yn unig: rhaid gwrthod ffurflen draws-safle heb docyn, rhaid gwrthod tocyn o sesiwn arall, ac ni ddylai unrhyw GET newid cyflwr. Gwiriwch briodweddau’r cwci yn offer datblygwyr, cadarnhewch fod y gwiriad Origin yn tanio ar gais nad yw’n cyfateb, a cheisiwch y gwesteiwr gweinyddol o’r tu allan i ystod y VPN i weld yr hidlydd yn gweithio.

Nid yw dim o hyn yn tynnu nam XSS y tu mewn i’r ap gweinyddol ei hun. Mae enw gwesteiwr ar wahân yn ffin ynysu ar ochr y porwr â gwerth gwirioneddol, ac nid yw’n cymryd lle atal gweithredu cod anniogel nac amddiffyn ceisiadau ar ochr y gweinydd. Ar ôl y gwahanu mae’r rhestr yn fyrrach nag y mae’n edrych: tarddiad gwahanol, cwcis un gwesteiwr, tocyn ar bob newid, hidlydd mynediad nad ydych yn ymddiried ynddo fel hunaniaeth, ac awdurdodiad a benderfynir fesul cais.

Erthyglau cysylltiedig