Sgript auth-user-pass-verify OpenVPN: cael y cod gadael yn iawn
Statws gadael y bachyn yw’r penderfyniad, nid ei linell log. Mapwch ganlyniadau’r dilysydd i 0, 1 neu ohiriedig, darllenwch y ffeil gymwysterau fel data, a methwch ar gau.
OpenVPN yn gweithredu ar un allbwn yn unig o sgript mewngofnodi: y statws gadael. Mae popeth arall y mae’r sgript yn ei wneud yn addurn. Gall bachyn gyrraedd y dilysydd cywir, dadansoddi’r ateb a phrintio llinell gyfeillgar wrth ddychwelyd statws sy’n golygu’r gwrthwyneb i’r hyn y bwriadwyd gan ei awdur. Darllenwch y contract yn gyntaf ac ysgrifennwch yr addasydd o’i amgylch, a bydd y dosbarth cyfan hwnnw o wallau yn diflannu.
Mae’r contract yn fach: nodwch y cyfrif a gyflwynwyd, gofynnwch y cwestiwn a fwriadwyd i’r dilysydd cymeradwy, a derbyniwch yn unig ganlyniad cadarnhaol dogfennedig y dilysydd hwnnw ar gyfer y cais hwnnw. Plymwaith yw popeth arall.
Y tri statws y gall y bachyn eu dychwelyd
Ar gyfer auth-user-pass-verify, mae llawlyfr OpenVPN 2.6 yn diffinio cod gadael 0 fel derbyniad, 1 fel gwrthodiad, a 2 fel dilysu gohiriedig. Dyma’r unig dri ateb y mae’r gweinydd yn eu deall, ac mae gan bob un ganlyniad gwahanol i’r cysylltiad. Mae sgript sy’n gadael â statws ei gorchymyn olaf wedi gadael i alwad logio neu gam glanhau bleidleisio. Ysgrifennwch y statws yn eglur ym mhob cangen, gan gynnwys y canghennau na chyrhaeddodd y dilysydd byth.
Mae llwyddiant HTTP a llwyddiant dilysu yn haenau ar wahân, a’u cymysgu yw’r ffordd fwyaf cyffredin y mae’r bachyn hwn yn mynd o’i le. Mae ymateb 202 yn golygu bod y cais wedi’i dderbyn i’w brosesu, nid bod cyfrinair wedi’i ddilysu. Diffiniwch y statws disgwyliedig, siâp yr ymateb a’r farn derfynol o’r contract API a roddwyd i chi, a pheidiwch â dyfeisio enw maes oherwydd ei fod yn edrych yn debygol.
Os daw’r ateb mewn gwirionedd yn hwyrach, dyna’r llwybr gohiriedig ac mae’n rhaid ei adeiladu felly. Mae ymgais ohiriedig na chwblheir byth yn dal adnoddau nes bod y terfyn amser yn dod i ben.
Darllenwch y ffeil gymwysterau yn union fel y’i hysgrifennwyd
Gyda’r dull dogfennedig drwy ffeil, mae’r gweinydd yn ysgrifennu’r enw defnyddiwr a’r cyfrinair fel dwy linell gyntaf ffeil dros dro, yn trosglwyddo’r llwybr hwnnw i’r sgript, ac yn dileu’r ffeil pan fydd y sgript yn dychwelyd. Darllenwch y ddwy linell hynny fel data: peidiwch byth â sourceio’r ffeil, peidiwch byth â’i gwerthuso, a pheidiwch byth â phastio ei chynnwys i linell orchymyn lle gall y tabl prosesau ei gweld. Cadwch y cyfrinair fesul beit, oherwydd mae normaleiddio’r ffordd y byddech yn normaleiddio enw defnyddiwr yn newid y cymhwyster yn dawel. Mae’r cyfeiriadur a ddefnyddir ar gyfer y ffeil dros dro honno yn benderfyniad defnyddio, felly cadarnhewch ei fod yn bodoli ac nad yw’n ddarllenadwy gan bawb ar y gwesteiwr.
Cadwch gymhwyster y dilysydd ei hun ar wahân i un y defnyddiwr: mae’n perthyn i integreiddiad y porth, yn byw yn storfa gyfrinachau’r platfform, ac yn ddim ond angen y caniatâd i ddilysu, felly nid yw’n dystiolaeth bod unrhyw berson penodol wedi dilysu. Peidiwch â gadael i’r bachyn ddod yn ail ddilysydd cyfrineiriau chwaith. Nid yw ailweithredu cymhariaeth hash â llaw yn cael ei wneud yn ddiogel trwy optimeiddio’r ddolen, ac mae dilysydd a gynhelir eisoes yn deall cynllun halen a chost storfa’r cyfrifon.
Penderfynwch beth mae ateb na ellir ei ddosbarthu yn ei olygu
Mae terfynau amser, gwallau cludo, ymatebion camffurf a backend na ellir ei gyrraedd yn rhannu un nodwedd: nid oes yr un ohonynt yn ddilysiad cadarnhaol. Dylai’r bachyn fethu ar gau ar gyfer pob un ohonynt a chofnodi rheswm y gall gweithredwr weithredu arno. Mae’r rheswm hwnnw’n perthyn i log gwarchodedig, nid i neges a ddychwelir i’r person sy’n ceisio cysylltu.
Byddwch yr un mor ofalus gyda’r llwybrau nad ydynt byth yn cyrraedd y dilysydd o gwbl. Dylai gwerth ffurfweddu ar goll, cyfrinach annarllenadwy neu ddibyniaeth nas gosodwyd gynhyrchu gwrthodiad â marciwr gweithredol clir yn hytrach na derbyniad damweiniol. Profwch y canghennau hynny drwy dynnu’r ddibyniaeth mewn labordy yn lle rhesymu amdanynt. Lle gall methiant i logio newid y statws gadael, mae’r logio wedi dod yn rhan o’r penderfyniad ac mae’n rhaid ei wneud yn ddiniwed.
Mae ffurfweddiad y gweinydd yn bwysig yma hefyd: dim ond pan fydd y ffurfweddiad rhedeg yn caniatáu sgriptiau a ddiffiniwyd gan y defnyddiwr ar y lefel diogelwch ofynnol y cânt eu parchu, ac mae’r gosodiad hwnnw’n ddewis bwriadol yn hytrach na diofyn i’w godi.
Dilyswch y farn, nid y llinell a brintiwyd
Adeiladwch brawf sy’n archwilio’r statws gadael yn uniongyrchol. Ysgrifennwch ffeil gymwysterau sampl, rhedewch y bachyn yn ei herbyn gyda chyfrif hysbys-dda a chyfrif hysbys-wael, a darllenwch y statws y mae’r plisgyn yn ei adrodd yn hytrach na’r testun y mae’r sgript yn ei brintio. Mae’r un gwiriad hwnnw’n dal y rhan fwyaf o wallau contract cyn i gleient gysylltu o gwbl.
Yna rhedwch yr un achosion drwy gleient go iawn yn erbyn gwrandäwr nad yw’n gynhyrchu a chadarnhewch yr hyn a gofnododd y gweinydd: derbyniwyd, gwrthodwyd neu ohiriwyd. Cwmpaswch gyfrif analluog, cyfrinair anghywir, ymateb camffurf y dilysydd, terfyn amser a dilysydd na ellir ei gyrraedd. Os bydd unrhyw achos yn glanio mewn cyflwr na allwch ei enwi, nid yw’r addasydd wedi gorffen.
Cadwch y mapio o ganlyniad y dilysydd i’r statws gadael wrth ymyl y sgript yn y storfa, fel y gall y peiriannydd nesaf ddarllen y contract heb wrthdroi’r cod.