OpenVPN toimib täpselt ühe sisselogimisskripti väljundi põhjal: väljumisoleku. Kõik muu, mida skript teeb, on kaunistus. Hook võib jõuda õige verifitseerijani, vastust analüüsida ja sõbraliku rea välja printida, samal ajal tagastades oleku, mis tähendab vastupidist sellele, mida autor kavatses. Lugege esmalt lepingut ja kirjutage adapter selle ümber, ja kogu see veaklass kaob.

Leping on väike: tuvastage esitatud konto, küsige heakskiidetud verifitseerijalt kavandatud küsimus ja aktsepteerige ainult selle verifitseerija dokumenteeritud positiivset tulemust selle päringu kohta. Kõik muu on taristu.

Kolm olekut, mida hook saab tagastada

auth-user-pass-verify puhul määratleb OpenVPN 2.6 käsiraamat väljumiskoodi 0 vastuvõtuna, 1 tagasilükkamisena ja 2 edasilükatud autentimisena. Need on ainsad kolm vastust, millest server aru saab, ja igal neist on ühendusele erinev tagajärg. Skript, mis väljub oma viimase käsu olekuga, on tegelikult lasknud logikutsel või koristussammul hääletada. Kirjutage olek igas harus selgesõnaliselt, ka neis harudes, mis verifitseerijani kunagi ei jõudnud.

HTTP edukus ja autentimise edukus on eraldi kihid ja nende segamine on kõige tavalisem viis, kuidas see hook valesti läheb. Vastus 202 tähendab, et päring võeti töötlemiseks vastu, mitte et parool on kontrollitud. Määratlege oodatav olek, vastuse kuju ja lõplik otsus teile antud API-lepingu põhjal ning ärge mõelge välja väljanime, sest see tundub usutav.

Kui vastus tõesti hiljem saabub, on see edasilükatud tee ja see tuleb nii ka ehitada. Edasilükatud katse, mis kunagi ei lõpe, hoiab ressursse kuni ajapiirang aegub.

Lugege mandaadifaili täpselt nii, nagu see on kirjutatud

Dokumenteeritud faili-meetodi korral kirjutab server kasutajanime ja parooli ajutise faili kahe esimese reana, edastab selle tee skriptile ja eemaldab faili, kui skript naaseb. Lugege neid kahte rida andmetena: ärge kunagi sourcige faili, ärge kunagi hinnake seda ja ärge kunagi kleepige selle sisu käsureale, kus protsessitabel seda näha saab. Säilitage parool bait-baidilt, sest normaliseerimine, mida te kasutajanime puhul rakendaksite, muudab mandaati vaikselt. Selle ajutise faili kataloog on juurutamisotsus, seega kinnitage, et see on olemas ja ei ole hostis kõigile loetav.

Hoidke verifitseerija enda mandaat kasutaja omast eraldi: see kuulub lüüsi integratsiooni, elab platvormi saladuste hoidlas ja vajab ainult kontrollimise luba, seega ei ole see tõend, et mõni konkreetne isik on autenditud. Ärge laske hookil saada ka teiseks parooliverifitseerijaks. Räsivõrdluse käsitsi uuesti kirjutamine ei muutu turvaliseks tsükli optimeerimisega ja hooldatud verifitseerija mõistab juba kontohoidla soolatud ja kulukat skeemi.

Otsustage, mida tähendab liigitamatu vastus

Ajapiirangud, transpordivead, rikutud vastused ja kättesaamatu taustaprogramm jagavad ühte omadust: ükski neist ei ole positiivne kontroll. Hook peaks igaühe puhul suletult ebaõnnestuma ja logima põhjuse, mille alusel operaator saab tegutseda. See põhjus kuulub kaitstud logisse, mitte sõnumisse, mis tagastatakse inimesele, kes üritab ühenduda.

Olge sama hoolas radadega, mis verifitseerijani üldse ei jõua. Puuduv konfiguratsiooniväärtus, loetamatu saladus või paigaldamata sõltuvus peaksid andma tagasilükkamise eristuva operatiivse markeriga, mitte juhusliku vastuvõtu. Testige neid harusid sõltuvuse laboris eemaldamisega, mitte nende üle spekuleerides. Kus logimise ebaõnnestumine võib väljumisolekut muuta, on logimisest saanud otsuse osa ja see tuleb muuta kahjutuks.

Serveri konfiguratsioon on siin samuti oluline: kasutaja määratud skripte arvestatakse ainult siis, kui jooksev konfiguratsioon lubab neid nõutaval turbetasemel, ja see seade on teadlik valik, mitte vaikeväärtus, mida tõsta.

Kontrollige otsust, mitte trükitud rida

Ehitage test, mis kontrollib väljumisolekut otse. Kirjutage näidismandaadifail, käivitage hook selle vastu teadaolevalt hea ja teadaolevalt halva kontoga ning lugege olekut, mille kest teavitab, mitte teksti, mille skript trükib. See üks kontroll püüab enamiku lepinguvigadest enne, kui klient üldse ühendub.

Seejärel laske samad juhtumid läbi päris kliendi mitteproduktsioonilise kuulaja vastu ja kinnitage, mida server kirjutas: vastu võetud, tagasi lükatud või edasilükatud. Katke keelatud konto, vale parool, rikutud verifitseerija vastus, ajapiirang ja kättesaamatu verifitseerija. Kui mõni juhtum satub olekusse, mida te ei oska nimetada, ei ole adapter valmis.

Hoidke verifitseerija tulemuse vastendust väljumisolekule skripti kõrval hoidlas, et järgmine insener saaks lepingut lugeda ilma koodi pöördprojekteerimiseta.

Seotud artiklid