OpenVPN-тың auth-user-pass-verify скрипті: шығу кодын дұрыс қою
Хуктың шығу мәртебесі — шешім, оның журнал жолы емес. Тексеруші нәтижелерін 0, 1 немесе кейінге қалдырылғанға сәйкестендіріңіз, тіркелгі деректері файлын дерек ретінде оқыңыз және қатеде жабық түрде сәтсіз болыңыз.
OpenVPN кіру скриптінің дәл бір шығысына сүйенеді: шығу мәртебесіне. Скрипт істейтін қалғанның бәрі — безендіру. Хук дұрыс тексерушіге жете алады, жауапты талдай алады және достық жолды басып шығара алады, бірақ автордың ойлағанына қарама-қарсы мәртебе қайтарады. Алдымен шартты оқып, айналасына адаптер жазыңыз, сонда бұл қателердің бүкіл сыныбы жоғалады.
Шарт шағын: жіберілген тіркелгіні анықтаңыз, бекітілген тексерушіге көзделген сұрақты қойыңыз және сол сұраныс үшін тек сол тексерушінің құжатталған оң нәтижесін қабылдаңыз. Қалғанының бәрі — инфрақұрылым.
Хук қайтара алатын үш мәртебе
auth-user-pass-verify үшін OpenVPN 2.6 нұсқаулығы шығу коды 0-ді қабылдау, 1-ді бас тарту және 2-ні кейінге қалдырылған аутентификация ретінде анықтайды. Сервер түсінетін жалғыз үш жауап осылар, және әрқайсысының қосылымға әсері бөлек. Соңғы командасының мәртебесімен шығатын скрипт шын мәнінде журнал шақыруына немесе тазалау қадамына дауыс беруге жол берген. Мәртебені әр тармақта анық жазыңыз, тексерушіге ешқашан жетпеген тармақтарды қоса.
HTTP сәттілігі мен аутентификация сәттілігі — бөлек қабаттар, және оларды шатастыру бұл хуктың қателесуінің ең көп тараған жолы. 202 жауабы сұраныстың өңдеуге қабылданғанын білдіреді, құпиясөздің тексерілгенін емес. Күтілетін мәртебені, жауаптың пішінін және түпкілікті үкімді сізге берілген API шартынан анықтаңыз және ақылға қонымды көрінгені үшін өріс атауын ойлап таппаңыз.
Егер жауап шындап кейінірек келсе, бұл — кейінге қалдырылған жол және оны солай құру керек. Ешқашан аяқталмайтын кейінге қалдырылған әрекет ресурстарды мерзім біткенше ұстайды.
Тіркелгі деректері файлын жазылған қалпында оқыңыз
Құжатталған файл арқылы әдісте сервер пайдаланушы аты мен құпиясөзді уақытша файлдың алғашқы екі жолы ретінде жазады, сол жолды скриптке береді және скрипт қайтқанда файлды жояды. Осы екі жолды дерек ретінде оқыңыз: файлды ешқашан source арқылы іске қоспаңыз, оны ешқашан бағаламаңыз және оның мазмұнын процестер кестесі көретін пәрмен жолына ешқашан қоймаңыз. Құпиясөзді байт-байт сақтаңыз, өйткені пайдаланушы атын қалыпқа келтіргендей оны қалыпқа келтіру тіркелгі деректерін іштей өзгертеді. Сол уақытша файлдың каталогы — орналастыру шешімі, сондықтан оның бар екенін және хостта бәріне оқуға қолжетімсіз екенін растаңыз.
Тексерушінің өзіндік тіркелгі деректерін пайдаланушыдан бөлек ұстаңыз: олар шлюз интеграциясына тиесілі, платформаның құпиялар қоймасында тұрады және тек тексеру рұқсатын қажет етеді, сондықтан белгілі бір адамның аутентификацияланғанына дәлел емес. Хуктың екінші құпиясөз тексерушісі болуына да жол бермеңіз. Хэшті салыстыруды қолмен қайта жазу циклді оңтайландырумен қауіпсіз болмайды, ал қолдау көрсетілетін тексеруші тіркелгі қоймасының тұздалған және қымбат схемасын әлдеқашан түсінеді.
Жіктеуге келмейтін жауаптың мағынасын шешіңіз
Мерзімдер, тасымалдау қателері, бүлінген жауаптар және қолжетімсіз backend бір қасиетті бөліседі: олардың ешқайсысы оң тексеру емес. Хук олардың әрқайсысы үшін жабық түрде сәтсіз болып, оператор әрекет ете алатын себепті жазуы керек. Бұл себеп қорғалған журналға тиесілі, қосылуға тырысқан адамға қайтарылатын хабарламаға емес.
Тексерушіге мүлде жетпейтін жолдарға да сондай мұқият болыңыз. Жетіспейтін конфигурация мәні, оқылмайтын құпия немесе орнатылмаған тәуелділік кездейсоқ қабылдаудың орнына ерекше операциялық белгісі бар бас тартуды тудыруы керек. Ол тармақтарды зертханада тәуелділікті алып тастап тексеріңіз, олар туралы ойланудың орнына. Журналдау сәтсіздігі шығу мәртебесін өзгерте алатын жерде журналдау шешімнің бөлігіне айналды және оны зиянсыз ету керек.
Сервер конфигурациясы бұл жерде де маңызды: пайдаланушы анықтаған скрипттер тек ағымдағы конфигурация оларға қажетті қауіпсіздік деңгейінде рұқсат бергенде ғана ескеріледі, және бұл параметр көтерілетін әдепкі мән емес, саналы таңдау.
Үкімді тексеріңіз, басылған жолды емес
Шығу мәртебесін тікелей тексеретін тест құрыңыз. Үлгі тіркелгі деректері файлын жазыңыз, хукты оған белгілі жақсы және белгілі нашар тіркелгімен іске қосыңыз және скрипт басатын мәтінді емес, қабық хабарлайтын мәртебені оқыңыз. Сол бір тексеру клиент қосылмай тұрып-ақ шарт қателерінің көбін ұстайды.
Содан кейін сол жағдайларды нақты клиент арқылы өндірістік емес тыңдаушыға қарсы жүргізіңіз және сервердің не жазғанын растаңыз: қабылданды, қабылданбады немесе кейінге қалдырылды. Өшірілген тіркелгіні, қате құпиясөзді, бүлінген тексеруші жауабын, мерзімді және қолжетімсіз тексерушіні қамтыңыз. Қандай да бір жағдай атай алмайтын күйге тап болса, адаптер бітпеген.
тексеруші нәтижесінен шығу мәртебесіне сәйкестендіруді скрипттің жанында репозиторийде ұстаңыз, келесі инженер кодты кері инженерияламай шартты оқи алуы үшін.